[英]PHP Session timeout
當用戶像這樣登錄時,我正在創建一個會話:
$_SESSION['id'] = $id;
如何在 X 分鍾的會話中指定超時,然后在達到 X 分鍾后讓它執行功能或頁面重定向?
編輯:我忘了提到由於不活動,我需要會話超時。
首先,存儲用戶上次發出請求的時間
<?php
$_SESSION['timeout'] = time();
?>
在隨后的請求中,檢查他們在多久之前提出了上一個請求(在此示例中為 10 分鍾)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
當會話過期時,數據不再存在,所以像
if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
每當會話不再活動時將重定向。
您可以使用session.cookie_lifetime設置會話 cookie 的存活時間
ini_set("session.cookie_lifetime","3600"); //an hour
編輯:如果您出於安全考慮(而不是方便)將會話超時,請使用已接受的答案,如下面的評論所示,這是由客戶端控制的,因此不安全。 我從不認為這是一種安全措施。
只需先檢查會話尚未創建,如果未創建,則創建一個。 在這里,我僅將其設置為 1 分鍾。
<?php
if(!isset($_SESSION["timeout"])){
$_SESSION['timeout'] = time();
};
$st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>
<?php
if(time() < $st){
echo 'Session will last 1 minute';
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
在網站測試期間,每個頁面的標題都對我有用(該網站尚未投入生產)。 它所落入的 HTML 頁面結束會話,只是通知用戶需要再次登錄。 這似乎比玩 PHP 邏輯更簡單。 我很想對這個想法發表一些評論。 有什么我沒見過的陷阱嗎?
<?php
session_start();
if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}
else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>
字節解決方案是有問題的,因為:
對於 cookie,通過 session.cookie_lifetime 設置過期是設計和安全方面的正確解決方案! 要使會話過期,您可以使用 session.gc_maxlifetime。
通過調用 session_destroy 使 cookie 過期可能會產生不可預測的結果,因為它們可能已經過期。
在 php.ini 中進行更改也是一個有效的解決方案,但它會使整個域的到期全局化,這可能不是您真正想要的 - 某些頁面可能會選擇比其他頁面更多地保留某些 cookie。
<?php
session_start();
if($_SESSION['login'] != 'ok')
header('location: /dashboard.php?login=0');
if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
// session inactive more than 10 min
header('location: /logout.php?timeout=1');
}
$_SESSION['last-activity'] = time(); // update last activity time stamp
if(time() - $_SESSION['created'] > 600) {
// session started more than 10 min ago
session_regenerate_id(true); // change session id and invalidate old session
$_SESSION['created'] = time(); // update creation time
}
?>
session_cache_expire( 20 );
session_start(); // NEVER FORGET TO START THE SESSION!!!
$inactive = 1200; //20 minutes *60
if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: user_logout.php");
}
}
$_SESSION['start'] = time();
if($_SESSION['valid_user'] != true){
header('Location: ../....php');
}else{
來源: http : //www.daniweb.com/web-development/php/threads/124500
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.