有人知道如何在用戶退出瀏覽器或瀏覽頁面時更新mysql數據庫嗎?我有一個值設置爲1,並希望它在這種事件中設置爲0。這幾周我一直把頭撞在牆上,任何幫助都會得到大量的讚賞,謝謝。我使用PHP。我已經嘗試過對身體卸載,但它沒有做我想要的。在瀏覽器退出時更新數據庫
0
A
回答
4
不要這樣做。僅僅因爲您依靠瀏覽器向您發送通知(通過beforeunload
事件)或其他一些機制。如果瀏覽器崩潰,或者用戶把他的電腦休眠/休眠,會發生什麼?
您可能會考慮其他選項,如PING!方法,瀏覽器可以通過Ajax調用每隔1分鐘發送一次,告訴他還活着。所有你需要做的就是創建一個MySQL程序,它可以掃描超過1:30分鐘的任何「活動」條目(調用last_seen TIMESTAMP
或其他),並將其設置爲「活動」爲0.此過程可能是在隨機請求中調用(非常類似於PHP會話清理機制)。
這將確保用戶仍然存在,因爲您將得到PING!請求定期和當用戶停止,你將能夠安全地說,他不會PING!了(雖然會造成輕微的延遲,但是可以接受)。這也將確保用戶安全。
0
PHP只能在頁面被訪問時改變事物。從PHP的角度來看,只要腳本結束,事務就結束了,並且與該頁面無關。
做到這一點的唯一方法是保持連接打開,腳本運行,並使用這樣的:
<?php
function shutdown()
{
// here you change the value on your db...
}
register_shutdown_function('shutdown');
// send the data to client
echo "anything";
flush();
// sleep for a lot of time... 99999 seconds...
sleep(99999);
?>
+0
一些虛擬主機會在幾秒後「殺死」PHP進程(比如1和1上的25),所以這是不切實際的。此外,對於少數用戶來說可能會很好,但這也會打開洪水攻擊...... – 2011-04-13 18:42:58
相關問題
- 1. AJAX更新數據庫在瀏覽器退出
- 2. Silverlight 3退出瀏覽器更新
- 3. 確認瀏覽器退出/瀏覽器退出技巧
- 4. 用戶關閉瀏覽器時更新MySQL數據庫
- 5. PHP腳本不會在瀏覽器退出時退出
- 6. 退出瀏覽器調用
- 7. 在瀏覽器關閉時更改數據庫的值表... JSP
- 8. 確認瀏覽器在GWT中退出
- 9. 在PHP中檢測瀏覽器退出
- 10. 按瀏覽器的後退按鈕時更新$ _SERVER ['SCRIPT_NAME']
- 11. 更新數據庫表並在瀏覽器關閉時終止會話
- 12. 的Android - SQLite數據庫瀏覽器不能正確更新
- 13. 關閉瀏覽器更新數據庫關閉
- 14. 圖像在數據庫中更改後未在瀏覽器中更新
- 15. 實時服務器更新瀏覽器
- 16. Chrome瀏覽器 - 檢測瀏覽器退出
- 17. 在數據庫中更新時出錯
- 18. 在數據庫中更新時出錯
- 19. 當服務器數據庫更新時更新sqlite數據庫
- 20. 當數據更新時,Highchart自動調頁瀏覽器
- 21. 更新基於瀏覽器中的時間到期的數據
- 22. AutoLogin Cookie在瀏覽器退出時在CakePHP 2x中被刪除
- 23. 更新數據庫時無需從電子郵件鏈接打開瀏覽器
- 24. 退出黑莓瀏覽器的代碼
- 25. Silverlight退出瀏覽器而不安裝?
- 26. Silverlight退出瀏覽器主機
- 27. Silverlight退出瀏覽器問題
- 28. Mozilla瀏覽器中退出觀察
- 29. IE9確認瀏覽器退出
- 30. Silverlight退出瀏覽器檢查
'我有一個值設置爲1,並希望在這樣的情況下設置爲0 。 - 你使用這個值來檢查在線/離線用戶嗎? – drudge 2011-04-13 18:26:01
爲什麼'onUnload'不適合你?這聽起來像你正在尋找的東西。 – eykanal 2011-04-13 18:29:38
@eykanal:大多數瀏覽器不允許在卸載期間(之前)以及在某些(差)瀏覽器中發送ajax請求,但您有競爭條件:異步ajax請求是在窗口關閉之前發送的嗎?您絕對不希望在(之前)卸載期間發送ajax請求。 – BalusC 2011-04-13 18:49:17