iT邦幫忙

0

如何用 jquery 抓到離開網站的時間點?

我現在是用一個作法,可以知道對方是否有在線上
就是透過 ajax + timeout 去每30秒問一次是否還在線上,是的話就更新現在的時間戳
然後用現在的時間去扣除使用者自己更新的時間,假設低於20秒就表示在線
扣除超過 30秒就是離線

只是現在有個問題
我想要知道對方是否已經關閉瀏覽器,或是離開網站了
任何離開網站的行為我可以知道那個時間點?然後作出對應的處理?例如把他某樣資料從資料庫裡刪除,就是在離開的當下可能過一分鐘就可以知道?這可以用啥技術實現?

我雖然可以知道他最後上線的時間戳
但這樣我沒辦法利用自動的方式做處理~只知道他確實離線而已

weiclin iT邦高手 4 級 ‧ 2018-10-24 18:00:33 檢舉
這一串有蠻多值得看的
https://stackoverflow.com/questions/3888902/detect-browser-or-tab-closing
火爆浪子 iT邦研究生 1 級 ‧ 2018-10-25 16:04:35 檢舉
我發現 beforeunload 是即使在同一個網站,只要離開頁面就會跑事件。。。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2018-10-25 17:44:27
最佳解答

其實啊,這個問題算是真的很有深度了。也是一直是許多人在討論的問題。

我先說說我的做法。
我大多數會用定時制的方式,去更新目前登入的用戶時間。目前設定是平均15~30秒更新一次資料。
然後後台會判斷5分沒更新過的就會視為離線。
網頁的ajax更新,超過15分的話。也會停止更新。(這是在防網頁崩潰)

當然,這樣的做法。還是會有5分的誤差。但這還算是我們可以接受的範圍。
曾經有試過每秒更新。但太操了。

而beforeunload或是單純的unload事件。早期也想要利用這個。丟ajax方式運行離開。
雖然這招可行,但實際試驗的結果。其實平均10次會有1~4次的不運行記錄。

sock當初也是在我的考量範圍。不過那時要求的準確度並沒需要說要到秒的地步。
再加上我又很懶的處理sock的東西。所以這部份我就沒研究過了。

ps:雖然最近要寫聊天室。可能還是需要用到。

看更多先前的回應...收起先前的回應...
火爆浪子 iT邦研究生 1 級 ‧ 2018-10-25 18:55:34 檢舉

我雖然是每30秒會更新使用者的時間戳
但我還真不知道怎麼「判斷」離線的話做些什麼事~
畢竟還是要有人去跑腳本?
我現在想到的作法是伺服器設定定期一小時去檢查。。。

火爆浪子 iT邦研究生 1 級 ‧ 2018-10-25 18:56:32 檢舉

因為如果他不在線上 settimeout 不就沒有作用了嗎?假設我1:30秒問你,你還在線上,所以我更新時間戳
但是你1:40就離開網站了,此時我的 ajax 不就沒有作用了?

就是要利用,一但關閉了頁面,ajax就不會動作的特性。
自然就不會在更新「在線時間」了

離線的動作判斷時機點,就得看你要做的事情有哪些了。
你有說到了一個方式,就是定期一個小時去檢查。
這就是用crontab制。不過一般我會每10分檢查就是了。

另一種是連動檢查。也就是在做更新(無論是誰)時。就順便連動檢查處理。
當然,這樣做的缺點就是,最後一位線上的人。永遠都不會更新資料了。因為沒人可以連動更新了。只是,如果你的站的人氣真的那麼差的話

可能你不明白這樣做的用意。
因為網頁真的很難做到即時性離線判斷。

所以用的方式,也只是利用在線時間標記特性。
因為我們可以做到的是,我可以確定你還在這個網站。
但做不到你是否還在電腦前的判斷。

方法有很多種,重點在於你要怎麼去思考轉過來。

0
Homura
iT邦高手 1 級 ‧ 2018-10-24 17:48:34

使用WebSocket/images/emoticon/emoticon23.gif

我要發表回答

立即登入回答