2009-12-03 142 views
0

我想在數據庫中存儲登錄,註銷和持續時間。登錄,註銷和持續時間在PHP和MySQL?

  • 當用戶被認證(登錄成功)
  • 當用戶點擊該退出按鈕
  • 的持續時間被創建的註銷時間,創建登錄時間是註銷 - 登錄時間。 (註銷減去登錄)

但問題是,如果用戶沒有單擊註銷按鈕,該怎麼辦。這裏有情況:

  • 互聯網損失
  • 關閉瀏覽器/標籤。 (我需要這個必須使用JavaScript,但我donnu如何做到這一點,任何想法?)

編輯:

我忘了添加一些問題,該計劃是一個完整的flash程序,有沒有導航到其他頁面。只有1頁

+0

你真的只需要存儲開始和結束日期時間 - 你可以根據需要計算持續時間,而不是存儲它。 – 2009-12-03 05:59:58

+0

註銷事情如何。我忘了添加一些問題,該程序是一個完整的Flash程序,沒有導航到其他頁面。僅1頁 – mysqllearner 2009-12-03 06:06:54

+0

Web服務器上的默認會話設置爲20分鐘。如果沒有註銷,登錄後的20次可以假設爲最多。沒有可靠的方法來知道連接何時發出,並且不值得AJAX呼籲我每隔一段時間編寫一次臨時值以便跟蹤。 – 2009-12-03 06:12:12

回答

0

如果用戶只是簡單地關閉瀏覽器,或者從互聯網上消失,您就不能依賴接收用戶註銷的事件。

在這種情況下,您必須有某種會話超時,並在您的應用程序意識到他們的會話太舊時記錄註銷。

如果這是一個真正的需求,那麼我會說你需要一個「cron」作業監控會話超時。當會話超時時,如果已登錄,則會記錄該用戶的「註銷」事件。

請注意,您不能使用(例如)ASPNET的Session_End事件,因爲它不會被可靠地調用(例如,如果服務器進程重新啓動)。

另一種方法是在用戶下次登錄時添加註銷時間 - 當他們登錄時,您檢查舊會話並假定自上次頁面擊中以來沒有關閉的時間持續了固定時間。

這就是你所能做的。

0

關於瀏覽器/標籤的關閉,您可以綁定unload事件(window.onunload,jQuery的$(window).unload(fn)或任何其他)來通知您的服務器。一個更通用的解決方案是定期ping你的服務器(比如說,每5分鐘一次),但這可能會讓用戶感到煩惱,所以明智地這樣做。

0

重要的是要記住,PHP中的所有會話/登錄功能都是基於cookie的通常是。因此,會話cookie的壽命應該能解決你的問題:

http://us3.php.net/manual/en/function.session-set-cookie-params.php

此外,您還可以設置PHP會話所以他們只使用cookies:

http://us2.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies

同樣,你可以趕上瀏覽器窗口/選項卡關閉,但...爲什麼?例如,我可能讓您的網站在多個選項卡中打開。如果我關閉了其中一個標籤,我是否應該自動從您的網站註銷?這是一個非常糟糕的設計。相反,請設置會話生存期,以便在關閉瀏覽器而不僅僅是一個選項卡時過期。如果你想存儲會話狀態

http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

- (包括彈出窗口或iframe中你真的想那還要注意window.unload將註銷時任何窗口上您的網站關閉。?)在數據庫中試試任何oneoftheseguides。或者,滾動你自己的session_set_save_handler