我只是想讓每個人都知道我是如何解決這個難題的。
最後,我放棄了Javascript中的unload
函數的想法,並採用了JS/PHP的組合解決方案。
當用戶在該網站上,這AJAX觸發每隔10秒:
$.ajax({
type: "POST",
url: "scripts/resession.php"
});
目標PHP更新用戶的數據庫last_active
統計:
<?php
session_start();
include('../includes/db.php');
if(isset($_SESSION['isloggedin'])){
$_SESSION['last_active']=time();
mysql_query("update users set last_active='$_SESSION[last_active]' where id='$_SESSION[user_id]' ");
}
?>
上打開用戶只有網站上的頁面,我們只需檢查用戶是否在最近20秒內處於活動狀態。如果不是,這意味着他們已經離開了現場的同時,我們將他們註銷並重定向到登錄頁面:
if(isset($_SESSION['isloggedin'])){
$result = mysql_query("select last_active from users where id='$_SESSION[user_id]' ");
$lainfo = mysql_fetch_assoc($result);
//if more than 20s of inactivity, that means our user has left the site in the meanwhile and they should be logged out
if($lainfo['last_active'] + 20 < time()){
unset($_SESSION['isloggedin']);
unset($_SESSION['user_id']);
unset($_SESSION['last_active']);
header("location:welcome.php");
exit;
}
}
這不是最理想的,它有一個10-20第二階段中,他們可以來返回並仍然登錄 - 但實際上有它的特權,因爲可能會出現用戶忘記執行某些操作並在關閉後立即返回的情況,因此在這種情況下必須重新登錄纔會令他們感到煩惱。
很明顯,每次重新加載站點時都會觸發,因爲窗口將重新啓動。只需依靠瀏覽器會話,瀏覽器關閉時會自動過期。 – Kalkran
對於php標籤感到好奇,如果沒有代碼來支持該問題以及會話。 –
@Kalkran我意識到現在,問題是,有沒有什麼方法可以使Javascript區分這些事件?至於瀏覽器會話到期,當我關閉標籤或導航到另一個網站時,它們不會過期。 – jovan