PHP会话超时脚本

Azz*_*ude 1 php session timeout logout

如果用户不更改页面10分钟,我会使用此代码记录用户.

$inactive = 600;

if(isset($_SESSION['timeout']) ) {
  $session_life = time() - $_SESSION['timeout'];
  if($session_life > $inactive) { 
    header("Location: logout.php"); 
  }
}

$_SESSION['timeout'] = time();
Run Code Online (Sandbox Code Playgroud)

你可以看到它很简单.我在所有受保护页面的顶部包含此功能,如果脚本未运行10分钟,则下次刷新页面时,用户将被发送到我的注销脚本.

不过那就是问题所在.在$ session_life> $ inactive变为true之后,需要再次运行脚本以便用户注销.一旦成为现实,我需要立即退出该人.

如果事情变得太复杂,有没有办法做到这一点?(即不使用AJAX)

Jon*_*Jon 7

不.您的PHP代码在每个请求上运行.如果您希望"立即"触发超时,那么您必须使用连续请求(错误的想法)向服务器发送垃圾邮件,或者将超时逻辑移动到客户端代码.

一个合适的解决方案可能是在页面加载时启动Javascript计时器,并在计时器到期时将用户重定向到注销页面.如果用户在此期间导航到另一页面,则当前计时器将被自动丢弃,并且当该页面加载时启动新计时器.它可以这么简单:

<script type="text/javascript">
    setTimeout(function() { window.location.href = "logout.php"; }, 60 * 10);
</script>
Run Code Online (Sandbox Code Playgroud)

更新:当然,您还应该保留服务器端代码以自行执行业务规则.当客户端合作时,Javascript将为您提供"最佳"方案; 如果客户端对您不利,PHP代码将为您提供保证.