我想在會話被銷燬後(即用戶關閉瀏覽器)誘發函數。該函數會將我的數據庫中的值從true更改爲false。那可能嗎?會話被破壞後引發函數
回答
我建議你在你的數據庫中註冊用戶的最後活動,這樣它就100%準確。 然後通過比較註冊日期和當前時間,您可以決定用戶何時處於活動狀態。
如果你真的想知道用戶是否仍在你的頁面上,你也可以做一些事情,但你應該避免它: 在客戶端,做一個JavaScript循環,例如每一分鐘,告訴你的服務器客戶端仍然在那裏。當客戶端關閉他的頁面時,循環不會進行任何新的查詢。
我猜你想知道用戶是否在線(或類似的東西?)「知道」(閱讀:猜測)會話已死的唯一方法是存儲用戶上次活動的時間,然後將該時間與當前時間進行比較。然後,根據您的需要,您可以決定假設爲假設,表示30分鐘處於非活動狀態的用戶處於脫機狀態。
只有這樣做的方法是使用Javascript檢測到關閉並使用Ajax請求(例如使用XMLHttpRequest
)到您的PHP頁面(它處理註銷部分)。
請參閱Browser/tab close detection using javascript (or any other language)關於關閉部分的更多信息。
我認爲這會起作用,然而當用戶點擊鏈接或刷新頁面時也會發生onunload事件 - 我只想和當用戶關閉瀏覽器的窗口或選項卡時發生的事件。 – Ziarno
@Ziarno有些網站有'你確定要離開?'的問題。檢查了這一點:http://stackoverflow.com/questions/1119289/how-to-show-the-are-you-sure-you-want-to-navigate-away-from-this-page-when-ch - 這是你應該使用的方式。 – Devator
我不希望函數在刷新時觸發。我想有沒有辦法只是有一個事件,觸發選項卡/窗口關閉,而不是刷新/鏈接... – Ziarno
- 1. 重定向後PHP會話被破壞?
- 2. TokBox會話被破壞
- 3. 會話變量被破壞
- 4. Symfony 2會話被破壞
- 5. Logut會話不被破壞
- 6. 註銷後破壞會話
- 7. SimpleMembershipProvider不會破壞會話後WebSecurity.SignOut
- 8. Codeigniter會話自動被破壞?
- 9. 奇怪的錯誤會話被破壞
- 10. 爲什麼PHP會話被破壞?
- 11. 會話被破壞掉了PHP
- 12. 會話是維護還是被破壞?
- 13. PHP會話在子域上被破壞
- 14. facebook註銷會話不被破壞
- 15. 在ajax jquery調用codeigniter中的函數後會話值被破壞
- 16. 會話不破壞
- 17. Cakephp會話破壞
- 18. Cookie破壞會話破壞,爲什麼?
- 19. PHP會話破壞後存在
- 20. 提交後會話被破壞,爲什麼?
- 21. 破壞特定會話的會話Funda
- 22. 無法破壞鉻會話
- 23. PHP會話和cookie破壞
- 24. 如何破壞會話?
- 25. 新的PHPMailer()破壞會話
- 26. 使用CakePHP破壞會話
- 27. PHP - 會話隨機破壞
- 28. 會話不破壞laravel
- 29. JsApi有時會被破壞
- 30. PHP數據會話重定向破壞
服務器不可能知道用戶關閉瀏覽器的時間。 – SLaks
當垃圾收集運行並且會話文件超過最大生存期時會話數據被銷燬。它從來沒有涉及到瀏覽器事件。 –
你可以嘗試對onunload事件發起請求,但不能保證它會起作用(它也會在導航到另一個頁面時被觸發)。如果您正在跟蹤數據庫中的會話,通常的方法是假定它會在某個時間點後過期。 – datasage