0

我在 php 中有一个网站,它有一个登录系统。如果网站处于非活动状态,我想在 10 分钟后注销用户。为此,我将使用以下代码:

session_start();
// set timeout period in seconds
$inactive = 600;
// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
$session_life = time() - $_SESSION['start'];
   if($session_life > $inactive) { 
     session_destroy(); 
     header("Location: index.php"); 
   }
}
$_SESSION['timeout'] = time();

但是,当我运行网站并刷新页面时,它会注销并将页面定向到“index.php”,甚至在“600 秒”过去之前。

这里可能有什么问题,我怎么知道该页面处于非活动状态?

非常感谢你的帮助。

4

2 回答 2

0

你在哪里定义的$_SESSION['start' ]?我对此进行测试:

$session_life = time() - $_SESSION['start'];
echo $session_life ,' - ', $_SESSION['timeout'];
die();

两者$session_life$_SESSION['timeout']具有相同的值,所以问题是,哪个值取$_SESSION['start']

于 2013-09-07T23:08:18.237 回答
0
session_start();

// set timeout period in seconds
$session_timeout = 600;

if (!isset($_SESSION['last_visit'])) { $_SESSION['last_visit'] = time(); } // I like brackets!

if((time() - $_SESSION['last_visit']) > $session_timeout) { 
  session_destroy(); 
  header("Location: index.php"); // think about user feedback, "your session timed out" ... index.php?action=session_timeout
  exit; // <= IMPORTANT !!!
}


$_SESSION['last_visit'] = time();
于 2013-09-07T23:09:30.193 回答