Chuyển hướng hết thời gian phiên PHP

Hướng dẫn PHP này được sử dụng để đặt thời gian hết hạn phiên đăng nhập của người dùng cho người dùng đã đăng nhập. Một lần, thời gian này trôi qua thì người dùng không còn truy cập vào các trang đã xác thực của ứng dụng

Trong hướng dẫn trước, chúng tôi đã tạo các biến phiên khi người dùng đăng nhập vào ứng dụng của chúng tôi

Trong hướng dẫn này, chúng tôi sẽ thêm dấu thời gian đăng nhập hiện tại vào một phiên. Sử dụng dấu thời gian này, chúng tôi đang kiểm tra xem đã đến thời gian hết hạn của phiên đăng nhập chưa. Nếu vậy, người dùng sẽ bị đăng xuất

Xem DemoTải về

Mã HTML để đăng nhập người dùng

Mã này là để hiển thị biểu mẫu đăng nhập cho người dùng

Chuyển hướng hết thời gian phiên PHP






		
			Enter Login Details
		
		
			Username
			
		
		
			Password
			
		
		
			
		
	

Tạo phiên đăng nhập người dùng

Trong mã này, chúng tôi đang thêm id người dùng đã đăng nhập và thời gian đăng nhập vào một biến phiên. Sau đó, chúng tôi đang gọi một hàm PHP để kiểm tra xem thời gian hết hạn của phiên đăng nhập đã hết chưa

Nếu không đạt được, thì người dùng sẽ được chuyển hướng đến trang tổng quan

if(count($_POST)>0) {
	if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin") {
		$_SESSION["user_id"] = 1001;
		$_SESSION["user_name"] = $_POST["user_name"];
		$_SESSION['loggedin_time'] = time();  
	} else {
		$message = "Invalid Username or Password!";
	}
}

if(isset($_SESSION["user_id"])) {
	if(!isLoginSessionExpired()) {
		header("Location:user_dashboard.php");
	} else {
		header("Location:logout.php?session_expired=1");
	}
}

Hàm PHP để kiểm tra thời gian chờ phiên đăng nhập

Chức năng này sẽ được gọi ở phần đầu của tất cả các trang được xác thực. Hàm này trả về TRUE nếu phiên đăng nhập của người dùng hết hạn, FALSE nếu không

function isLoginSessionExpired() {
	$login_session_duration = 10; 
	$current_time = time(); 
	if(isset($_SESSION['loggedin_time']) and isset($_SESSION["user_id"])){  
		if(((time() - $_SESSION['loggedin_time']) > $login_session_duration)){ 
			return true; 
		} 
	}
	return false;
}

Phiên đăng nhập của người dùng Hết hạn đăng xuất

đăng xuất này. trang php sẽ “bỏ đặt” phiên người dùng đã đăng nhập và kiểm tra trạng thái của cờ session_expired. Nếu nó được đặt, thì thông báo hết thời gian phiên đăng nhập sẽ được hiển thị cho người dùng

Cảm ơn bạn,
Nó hoạt động.
Bạn đã đưa ra phương pháp hay nhất, sau đó là giải pháp cho vấn đề của tôi. Hỗ trợ thực sự chu đáo.
ACP


Có thể sử dụng trang đăng nhập tùy chỉnh là một ý tưởng tồi so với việc thêm chức năng bổ sung vào trang đăng nhập hiện tại của bạn.
Dù sao thì bạn cũng có thể thử một cái gì đó như thế này trong sự kiện AfterAppInit.
if(count($_POST)>0) {
	if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin") {
		$_SESSION["user_id"] = 1001;
		$_SESSION["user_name"] = $_POST["user_name"];
		$_SESSION['loggedin_time'] = time();  
	} else {
		$message = "Invalid Username or Password!";
	}
}

if(isset($_SESSION["user_id"])) {
	if(!isLoginSessionExpired()) {
		header("Location:user_dashboard.php");
	} else {
		header("Location:logout.php?session_expired=1");
	}
}
1

if(count($_POST)>0) {
	if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin") {
		$_SESSION["user_id"] = 1001;
		$_SESSION["user_name"] = $_POST["user_name"];
		$_SESSION['loggedin_time'] = time();  
	} else {
		$message = "Invalid Username or Password!";
	}
}

if(isset($_SESSION["user_id"])) {
	if(!isLoginSessionExpired()) {
		header("Location:user_dashboard.php");
	} else {
		header("Location:logout.php?session_expired=1");
	}
}
2

Plugin xác thực xử lý việc này theo mặc định, bạn chỉ cần đặt cấu hình

if(count($_POST)>0) {
	if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin") {
		$_SESSION["user_id"] = 1001;
		$_SESSION["user_name"] = $_POST["user_name"];
		$_SESSION['loggedin_time'] = time();  
	} else {
		$message = "Invalid Username or Password!";
	}
}

if(isset($_SESSION["user_id"])) {
	if(!isLoginSessionExpired()) {
		header("Location:user_dashboard.php");
	} else {
		header("Location:logout.php?session_expired=1");
	}
}
3 như trong tài liệu của plugin

src/Ứng dụng. php

public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
{
    $service = new AuthenticationService();

    $service->setConfig([
        'unauthenticatedRedirect' => '/users/login',
        'queryParam' => 'redirect',
    ]);

    // your other code goes here...

    return $service;
}

Với AuthComponent mà có lẽ bạn đang sử dụng cho CakePHP 3. *, cũng giống như vậy, nó nối thêm chuỗi truy vấn

if(count($_POST)>0) {
	if( $_POST["user_name"] == "admin" and $_POST["password"] == "admin") {
		$_SESSION["user_id"] = 1001;
		$_SESSION["user_name"] = $_POST["user_name"];
		$_SESSION['loggedin_time'] = time();  
	} else {
		$message = "Invalid Username or Password!";
	}
}

if(isset($_SESSION["user_id"])) {
	if(!isLoginSessionExpired()) {
		header("Location:user_dashboard.php");
	} else {
		header("Location:logout.php?session_expired=1");
	}
}
4 như được hiển thị trong mã và khi bạn đăng nhập, nó sẽ kiểm tra xem thông số truy vấn này có tồn tại dưới dạng hiển thị không và chuyển hướng tương ứng

Bạn cần đặt lại giá trị $_SESSION cho thời gian chờ ($_SESSION['timeLogin']) khi bạn thực hiện chuyển hướng, nếu không, khi khách hàng quay lại từ chuyển hướng, giá trị trong phiên sẽ giống nhau và sẽ được chuyển hướng lại

Bạn có thể giải quyết nó với

if(!isset($_SESSION['clientmacs']) ) {
    $_SESSION['clientmacs'] = ""; // add this line if not added somewhere else
    header('Location: index.php');
}

if(time() - $_SESSION['timeLogin'] > 1800) {
    $_SESSION['timeLogin'] = time(); // add this line
    header('Location: include/logout.php');
}

Có thể (tùy thuộc vào logic của bạn) nên xóa toàn bộ phiên và để nó được cấu hình lại thông qua luồng bình thường (



    HTML CODE


1) khi bạn thực hiện chuyển hướng

Giải pháp liên quan

Php – Cách sử dụng PHP để lấy năm hiện tại

Bạn có thể sử dụng ngày hoặc strftime. Trong trường hợp này, tôi muốn nói rằng không có vấn đề gì vì một năm là một năm, không có vấn đề gì (trừ khi có một ngôn ngữ định dạng năm khác nhau?)

Ví dụ


Bên cạnh đó, khi định dạng ngày trong PHP, điều quan trọng là bạn muốn định dạng ngày của mình ở một ngôn ngữ khác với ngôn ngữ mặc định của bạn. Nếu vậy, bạn phải sử dụng setlocale và strftime. Theo hướng dẫn sử dụng php vào ngày

Để định dạng ngày tháng trong các ngôn ngữ khác, bạn nên sử dụng các hàm setlocale() và strftime() thay vì date()

Từ quan điểm này, tôi nghĩ tốt nhất nên sử dụng strftime càng nhiều càng tốt, nếu bạn thậm chí có khả năng phải bản địa hóa ứng dụng của mình từ xa. Nếu đó không phải là vấn đề, hãy chọn cái bạn thích nhất

Php – Cách lấy ngày giờ hiện tại trong PHP

Thời gian sẽ trôi qua theo thời gian máy chủ của bạn. Một cách giải quyết dễ dàng cho việc này là đặt múi giờ theo cách thủ công bằng cách sử dụng



    HTML CODE


2 trước khi các hàm


    HTML CODE


3 hoặc


    HTML CODE


4 được gọi tới

Làm cách nào để kiểm tra thời gian chờ của phiên PHP?

Sử dụng hàm time() , có thể tính được thời gian hiện tại. Sự khác biệt giữa thời gian hiện tại và biến phiên được tạo tại thời điểm đăng nhập không được vượt quá thời gian chờ mong muốn. Khi vượt quá thời lượng, phiên sẽ bị hủy và trang được chuyển hướng đến trang Đăng nhập.

Làm cách nào để đặt thời gian hủy phiên trong PHP?

Có thể thực hiện bằng cách nhấp vào nút đăng xuất hoặc hủy phiên đó sau một khoảng thời gian cố định . Theo mặc định, thời gian hết hạn của bất kỳ phiên cụ thể nào được tạo là 1440 giây tôi. e. (24*60) tôi. e. 24 phút.

Tại sao phiên phá hủy tự động PHP?

Nếu số giây đã trôi qua kể từ đó lớn hơn phiên hiện tại. giá trị gc_maxlifetime, nó sẽ hủy phiên

Thời gian chờ mặc định cho phiên trong PHP là gì?

Mặc định là 1440 (24 phút) . Ghi chú. Nếu các tập lệnh khác nhau có các giá trị phiên khác nhau. gc_maxlifetime nhưng chia sẻ cùng một vị trí để lưu trữ dữ liệu phiên thì tập lệnh có giá trị tối thiểu sẽ làm sạch dữ liệu.