以下代码仅在手动页面刷新时到期页面。我希望页面自动使会话过期并注销用户并重定向到登录页面。
<?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,但想确保是否有任何其他可能。请确认实施此方法。
答案 0 :(得分:0)
您可以使用session_cache_expire(minutes);
<?php
session_cache_expire(30);
session_start();
更多信息:http://php.net/manual/en/function.session-cache-expire.php
答案 1 :(得分:0)
通常,PHP仅在响应HTTP请求时执行,因此在请求到达之前不会清除会话。使用session configuration参数配置何时以及如何完成此操作。
虽然您无法直接运行会话管理代码,但可以通过配置参数然后通过cron
或类似工具模拟请求来使其运行。使用未发布的URL请求每分钟(或其他)ping您的服务器,将session.gc_probability
设置为100,然后启动会话。这将导致会话管理代码垃圾收集会话 - 这将有效地清除任何超时会话。
答案 2 :(得分:0)
你可以用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>
答案 3 :(得分:0)
您可以使用元刷新 例如30分钟
META HTTP-EQUIV =&#34;刷新&#34;含量=&#34; 1800; URL = .. / logout.php&#34;