2012-10-23 29 views
-1

我有下面的腳本。當我們關閉窗口時,用戶註銷正在工作,但在數據庫中狀態沒有改變。我的意思是狀態1顯示用戶在線,狀態0顯示爲離線,但是當用戶通過關閉窗口註銷時,狀態不會改變。如何在瀏覽器關閉時運行查詢?

如果我們點擊「註銷」按鈕,onlu然後狀態改變。

if($_SESSION['username'] != "admin") 
{ 
    $timeout = 1; 
    $logout_redirect_url = "logout.php"; 
    $timeout = $timeout * 60; 

    if(isset($_SESSION['start_time'])) 
    { 
     $elapsed_time = time() - $_SESSION['start_time']; 
     if ($elapsed_time >= $timeout) 
     { 
      $db->query($strQuery1); 
      header("Location: $logout_redirect_url"); 
     } 
    } 

    $_SESSION['start_time'] = time(); 
} 
+0

從你的問題的描述,我會假設瀏覽器不重定向。重定向是否發生在瀏覽器中?此外,如果您正確縮進代碼,您可能會更容易發現邏輯或控制流錯誤。 – hakre

+3

您的數據庫應該如何獲得有關關閉瀏覽器的用戶的知識? –

+0

@ user1755316請在發佈之前格式化您的代碼,以便更好地閱讀。 – Peon

回答

0

我不知道這是否是更好的辦法 如果你想動態地知道,如果一個用戶當前在您的網站或沒有,你可以設置一個值,最後連接在你的數據庫(它保存日期時間值)。當用戶重新加載新頁面時,此值「上次連接」將被重置,可能是您應用測試以查看他當前是否已登錄。

之後,創建一個讀取值「last connect」的cron,您可以知道用戶是否超時。

0

你可以做什麼,是添加一個JavaScript window.onBeforeUnload事件,觸發ajax調用並更新您的查詢。

但它不安全,因爲它只有客戶端,但它是值得一試的。

另一種方法是檢查會話時間,如果會話尚未刷新到所需的超時時間,則手動註銷用戶。

PS:你也應該看看this手冊,會很有幫助。