2013-11-01 172 views
0

我使用此代码闲置10秒后结束会话:销毁会话PHP

ini_set('session.gc_maxlifetime', 10); 
session_start(); 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 10)) { 
    session_unset(); 
    session_destroy(); 
} 
$_SESSION['LAST_ACTIVITY'] = time(); 

它的工作原理,只有当我不活动10秒后刷新页面。如果我不刷新页面或关闭浏览器,会话永远不会被销毁。有人可以帮我解决这个问题吗?

+2

您需要每隔10秒触发一次AJAX请求才能检查此问题。每8天一次 – fire

+0

..您可以迟到刷新会话的一生。 –

+0

@fire您需要在javascript中的每个操作(活动)之后设置一个超时值,当用户执行某些操作时将其清除,并且只在定时器耗尽并且想要销毁会话时触发ajax请求。 – jeroen

回答

-1

10秒后,你需要摧毁的会话,然后重定向他们,就像这样:

session_destroy(); 
header("Location: logoutpage.php"); 

这将“刷新”页面并摧毁了会议。

对不起,我不明白,但你需要一个Ajax调用,这里是一个类似的问题。我会稍后发布ajax。抱歉。

Unset session after some time

这里是阿贾克斯...设置超时到您指定的时间。再次,抱歉不澄清。

function refresh() { 
    $.ajax({ 
     type: 'GET', // can be POST or GET 
     url: 'page.php' // php script to call 
    // when the server responds 
    }).done(function(response) { 
     console.log(response); 
     // call your function automatically 
     setTimeout(refresh, 5000); 
    }); 
} 

基本上,功能refresh被调用每5000毫秒。

0

感谢您的建议。

现在我正在使用此JavaScript代码刷新10秒后不活动,它的效果很好。但是当我关闭浏览器会话时仍然不会被破坏。

<body onmousemove = "canceltimer()"; onclick = "canceltimer()"> 
<script type="text/javascript"> 
    var tim = 0; 
    function reload() { 
     tim = setTimeout("location.reload(true);",10000); 
    } 

    function canceltimer() { 
     window.clearTimeout(tim); 
     reload(); 
    } 
</script>