5

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

$_SESSION['logged_in'] = true;

在会话由于不活动而到期后,我无法找到一种方法来重定向以重定向到我的 logout.php。我还应该放置使该会话变量过期的代码。php.ini我已经用谷歌搜索了这个错误,它建议在大多数文章中调整文件。但是我看到一篇文章说这不是最佳实践。

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

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

我想知道会话过期后重定向的最佳方式以及代码放置位置的建议。

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

先感谢您

4

2 回答 2

14

如果您想在用户长时间不活动时尝试加载页面时注销用户,您应该将此代码放在每个 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正确添加标签!

于 2013-03-24T07:53:02.290 回答
1

实现这个想法:

$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';
}
于 2013-03-24T07:28:20.337 回答