以下代码仅在手动刷新页面时使页面过期。我希望该页面自动使会话过期,并注销用户并重定向到登录页面。
<?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"