由于不活动而设置会话超时

时间:2012-03-12 09:58:23

标签: php session timeout

我目前正在处理会话超时。 在我的页面在特定时间不活动期间, 会话应该超时并返回登录页面。

我有这段代码。

// set timeout period in seconds
$inactive = 30;
// check to see if $_SESSION['timeout'] is set
$logger->debug("root|DEBUG3 accdetails_proc");
if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
    { 
        session_destroy(); 
        header("Location: ../../index.php");
             ///OR
        //echo('<script type="text/javascript">');
        //echo('top.location.href = "../../index.php"');
        //echo('</script>');  
    }
    else{ }

标头和回声都不起作用。当它超时时, 它在session_destroy()中停止并仍然执行回调, 因为我使用ajax调用此文件。

如果我使用“echo”,响应是:

<script type="text/javascript">top.location.href = "../../index.php"</script>');  

在我的回调中解析时已经发出错误。

如果我使用“标题”,则返回我的登录页面的html 但首先执行我的回调,所以它仍然发出错误 并且未加载登录页面。

有人可以帮忙解决如何在执行ajax回调时的问题 你摧毁了一个会话?

由于

2 个答案:

答案 0 :(得分:1)

如果您使用Ajax回调来检查会话是否超时,则需要处理重定向到Ajax数据处理程序中的起始页面。

您的PHP可能如下所示:

if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
    { 
        session_destroy(); 
        echo "LOGOUT";
    }
}
echo "OK";

您页面上的JavaScript代码可能如下所示(假设您使用jQuery):

$.get('http://example.com/my_session_check.php', function(data){ 
  if(data=='LOGOUT') {
    top.location.href="../../index.php";
  } 
});

答案 1 :(得分:0)

您需要在头文件中使用的ajax中添加相同的逻辑。向回叫功能发送超时响应,在回叫中,您可以显示警报,然后根据您的要求重定向浏览器。