由于不活动而导致会话超时

时间:2013-03-24 06:46:15

标签: php

我创建了一个脚本login.php,并在那里创建了一个名为logged_in的会话变量

$_SESSION['logged_in'] = true;

由于不活动,会话过期后我无法找到重定向到重定向到我的logout.php的方法。我也应该把使这个会话变量到期的代码。我已经用Google搜索了错误,它建议在大多数文章中调整php.ini文件。但是我发现一篇文章说这不是最好的做法。

我在StackOverflow上找到了以下代码,但我不知道在哪里放它: -

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>

我想了解会话到期后重定向的最佳方法以及放置代码的位置的建议。

编辑:我忘了提到我想知道如何手动设置会话到期的时间。

提前谢谢

2 个答案:

答案 0 :(得分:11)

如果您想要在用户长时间处于非活动状态时尝试加载页面时要注销用户,则应将此代码放在每个php文件的顶部(在任何其他html标记之前):

if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) { //have we expired?
    //redirect to logout.php
    header('Location: http://yoursite.com/logout.php'); //change yoursite.com to the name of you site!!
} else{ //if we haven't expired:
    $_SESSION['last_activity'] = time(); //this was the moment of last activity.
}

此外,将此代码放在您成功登录后登陆页面的顶部:

$_SESSION['logged_in'] = true; //set you've logged in
$_SESSION['last_activity'] = time(); //your last activity was now, having logged in.
$_SESSION['expire_time'] = 3*60*60; //expire time in seconds: three hours (you must change this)

在该页面上,您不必包含我先给您的支票代码。

顺便说一句,不要忘记正确添加<?php标签!

答案 1 :(得分:0)

实现这个想法:

$expire_time = 3*60*60; //expire time
if( $_SESSION['last_activity'] < time()-$expire_time ) {
    echo 'session expired';
    die();
}
else {
    $_SESSION['last_activity'] = time(); // you have to add this line when logged in also;
    echo 'you are uptodate';
}