如何在x分钟后强制注销php会话(非非活动注销)


How to Force log out php session after x minutes (not inactive log out)

以下代码仅在手动刷新页面时使页面过期。我希望该页面自动使会话过期,并注销用户并重定向到登录页面。

<?php
session_start();
if( !isset( $_SESSION['user_id'] ) || (time() - $_SESSION['login_time']) > 60) /*session expires after 1 minute*/
{
    //logout code such as session unset, destroy;
    header("Location:login.php");
}
else
{
    //page  contents if any
}
?>

gc_maxlifetime也有自己的问题。所以我不想实现它。找到了另一个使用ajax和php的方法,但我想确保还有其他可能的方法。请确认实现此功能的方法。

通常,PHP只在响应HTTP请求时执行,因此在请求到达之前不会清理会话。使用会话配置参数来配置何时以及如何执行此操作。

虽然不能直接运行会话管理代码,但可以通过配置参数,然后通过cron或类似工具模拟请求,使其运行。每隔一分钟(或其他时间)用一个未发布的URL请求Ping服务器,该请求将session.gc_probability设置为100,然后启动会话。这将导致会话管理代码对会话进行垃圾收集,这将有效地清除任何超时的会话。

您可以使用session_cache_expire(minutes); 确定会话的时间

    <?php
    session_cache_expire(30);
    session_start();

更多信息:http://php.net/manual/en/function.session-cache-expire.php

您可以使用jQuery.ajax或其他您喜欢的ajax来完成此操作:

<?php
$sessiontime = 60; // 1 minute
$time = $_SESSION['login_time']-time()+$sessiontime;
?>
<script>
setTimeout(function() {
   $.ajax({
      url: '/path/to/logout-file.php',
      dataType: 'json',
      complete: function(){
         window.location.href = 'login.php';
      }
   });
}, (<?=$time?>*1000));
</script>

您可以使用元刷新例如30分钟

META HTTP-EQUIV="刷新"content="1800;URL=../logout.php"