我已經看過幾個主題(這裏是&谷歌)有關檢測瀏覽器在PHP中退出和即時通訊沒有真正清楚如何這樣做。在PHP中檢測瀏覽器退出
我嘗試了PHP中的register_shutdown_function
,但即使在刷新瀏覽器頁面時也是如此。
任何人都可以幫忙嗎?
在此先感謝
我已經看過幾個主題(這裏是&谷歌)有關檢測瀏覽器在PHP中退出和即時通訊沒有真正清楚如何這樣做。在PHP中檢測瀏覽器退出
我嘗試了PHP中的register_shutdown_function
,但即使在刷新瀏覽器頁面時也是如此。
任何人都可以幫忙嗎?
在此先感謝
PHP是一種服務器端語言。瀏覽器事件由DOM事件處理。在「onunload」或「onbeforeunload」事件上,發送一個AJAX調用到PHP文件。
和in this other question這裏有一個我正在說的話的風味解釋。
謝謝tpaksu但「onunload」或「onbeforeunload」有兼容性問題 – Woz
是的,我知道。主要想法是使用那些或類似的東西。只是展示一種方式。 –
至少有一個解決方案至少可以防止使用Javascript和Ajax向服務器發送心跳,然後假設瀏覽器窗口在信號停止跳動時已關閉。
另一種方法是使用web套接字在瀏覽器窗口關閉之前保持連接不變。
在任何情況下,將需要相當多的工作,從你的一部分來進行設置
請解釋你想要什麼在瀏覽器關閉的事,看看有沒有可能是另一種方法做所以。
Web服務器將其響應發送給瀏覽器,然後(通常)關閉連接。你不得不在Javascript中做些什麼,但是這並不能滿足所有條件。你當然無法檢測到它的服務器端。
它可以使用JavaScript onbeforeunload
或onunload
功能可以檢測出,但是那是絕對不準確的,因爲它不會檢測:
另請參閱this answer。
因此,例如,當用戶在關閉瀏覽器時想要註銷用戶時,最好使用「keepalive」機制,而不是「說再見」機制。然後,您可以將這些用戶關閉在服務器上(例如使用cron
),這些用戶的會話未處於活動狀態(即沒有發送「keepalive」的用戶超過X分鐘)。
不只是用PHP。
PHP運行服務器端,並且在用戶有機會關閉瀏覽器時處理頁面已經很久了。您可以在技術上檢測PHP是否仍在處理頁面,並且用戶使用特定配置關閉它。但是,這並不理想。見connection_aborted()
。
你需要做的是用JavaScript建立一個長輪詢連接,並監視它在服務器端。然後,您會知道該窗口何時關閉。這個連接可以對你的PHP腳本進行,允許PHP檢查connection_aborted()
。請注意,您需要設置ignore_user_abort()
才能正常工作,或者相應地配置PHP.ini。
我看到了,我嘗試使用JS/jQuery,但似乎有跨瀏覽器問題。我想要做的是在用戶退出或關閉瀏覽器時更新數據庫字段。 – Woz