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

时间:2014-08-27 20:40:46

标签: php session logout

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

<?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,但想确保是否有任何其他可能。请确认实施此方法。

4 个答案:

答案 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;