会话超时或空闲时自动重定向用户

时间:2009-06-16 17:58:42

标签: php javascript session

我想让一个计时器在页面上每3分钟运行一次(javascript),以检测php会话($ _SESSION)是否超时......如果是,则自动重定向它们。

一个很好的例子,一个用户登录并运行楼梯,并且永远不会回来......我希望javascript通过一个简单的重定向来记录它们......

这可能吗?我怎么做这样的事情?我正在使用PHP和javascript。

修改: Rob在下面说的正是我正在寻找的......我安全地引用了''...

我怀疑迈克要求的是,当会话超时时,应该告诉浏览器离开当前页面。例如,一些银行在一段时间不活动后这样做。 - Rob Kennedy 5小时前

3 个答案:

答案 0 :(得分:11)

您可以使用简单的元刷新

<meta http-equiv="refresh" content="180;url=http://example.com/logout" />

或者您使用PHP实现超时:

session_start();
if (isset($_SESSION['LAST_REQUEST_TIME'])) {
    if (time() - $_SESSION['LAST_REQUEST_TIME'] > 180) {
        // session timed out, last request is longer than 3 minutes ago
        $_SESSION = array();
        session_destroy();
    }
}
$_SESSION['LAST_REQUEST_TIME'] = time();

如果会话仍然有效,则无需每隔3分钟检查一次。

答案 1 :(得分:1)

新的和改进的解决方案

肯尼迪先生指出我的原始解决方案(下方)不起作用。所以这是一种方法。

在用户数据库中,保留每次用户加载页面时更新的最后活动时间戳。

然后在checkaccess.php

if ( time-last_access > max_inactivity_time ) {
     return array('access' => '0');
}
else {
     return array('access' => '0');
}

在javascript计时器(下面)中调用checkaccess.php并相应地注销

这也允许“当前登录的用户”功能

谢谢肯尼迪先生


原始的非工作解决方案

根据当前用户会话的有效性创建一个返回1或0的php页面

然后在您想要超时的页面中将此添加到头部(您需要jquery)

setInterval(function(){
   var url = UrL_OF_SESSION_CHECKING_PAGE;
      $.getJSON( url,
         function( data ) {
            if (data.access=='0') {
               window.location = LOGIN_PAGE;
            }
         }
      );
}, 180000);

每180秒(3分钟)它会请求php页面并获得会话的有效性。如果无效,则会重定向到登录页面

如果用户打开多个页面,页面会超时并在不同时间重定向,因为他们的计时器不同。

这是一个关于javscript计时器的好页面 http://ejohn.org/blog/how-javascript-timers-work/

简单会话检查页面

session_start();
die(
    json_encode(
        isset( $_SESSION['VARIABLE'] ) ? array( 'access' => '1') : array( 'access' => '0' )
    )
);

将VARIABLE更改为您的一个会话变量

答案 2 :(得分:0)

如果您希望在页面刷新之前发生这种情况,您需要定期进行ajax调用。您可以使用jQuery Heartbeat每3分钟拨打一次电话,并使用其他用户已提供的其中一种PHP方法来检查会话