2013-11-01 211 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>