2013-02-04 195 views
0

我想在會話被銷燬後(即用戶關閉瀏覽器)誘發函數。該函數會將我的數據庫中的值從true更改爲false。那可能嗎?會話被破壞後引發函數

+6

服務器不可能知道用戶關閉瀏覽器的時間。 – SLaks

+0

當垃圾收集運行並且會話文件超過最大生存期時會話數據被銷燬。它從來沒有涉及到瀏覽器事件。 –

+2

你可以嘗試對onunload事件發起請求,但不能保證它會起作用(它也會在導航到另一個頁面時被觸發)。如果您正在跟蹤數據庫中的會話,通常的方法是假定它會在某個時間點後過期。 – datasage

回答

0

我建議你在你的數據庫中註冊用戶的最後活動,這樣它就100%準確。 然後通過比較註冊日期和當前時間,您可以決定用戶何時處於活動狀態。

如果你真的想知道用戶是否仍在你的頁面上,你也可以做一些事情,但你應該避免它: 在客戶端,做一個JavaScript循環,例如每一分鐘,告訴你的服務器客戶端仍然在那裏。當客戶端關閉他的頁面時,循環不會進行任何新的查詢。

0

我猜你想知道用戶是否在線(或類似的東西?)「知道」(閱讀:猜測)會話已死的唯一方法是存儲用戶上次活動的時間,然後將該時間與當前時間進行比較。然後,根據您的需要,您可以決定假設爲假設,表示30分鐘處於非活動狀態的用戶處於脫機狀態。

0

只有這樣做的方法是使用Javascript檢測到關閉並使用Ajax請求(例如使用XMLHttpRequest)到您的PHP頁面(它處理註銷部分)。

請參閱Browser/tab close detection using javascript (or any other language)關於關閉部分的更多信息。

+0

我認爲這會起作用,然而當用戶點擊鏈接或刷新頁面時也會發生onunload事件 - 我只想和當用戶關閉瀏覽器的窗口或選項卡時發生的事件。 – Ziarno

+0

@Ziarno有些網站有'你確定要離開?'的問題。檢查了這一點:http://stackoverflow.com/questions/1119289/how-to-show-the-are-you-sure-you-want-to-navigate-away-from-this-page-when-ch - 這是你應該使用的方式。 – Devator

+0

我不希望函數在刷新時觸發。我想有沒有辦法只是有一個事件,觸發選項卡/窗口關閉,而不是刷新/鏈接... – Ziarno