想請教各位先進,目前敝人所製作的網站(下稱 A 網站),登入、操作等,只要 Client 端發 Request 到 Server 端,都會紀錄。唯獨【登出】,在目前 A 網站做法是做一個使用者自主按登出的按鈕,只要按登出紐,就會有登出紀錄,但有兩個狀況如下:
onbeforeunload
向 Server 丟一個登出的 Request,那麼連帶重新整理、關閉分頁也會將使用者登出了。另外想了解一下各位先進的想法,如同主旨,
網站該做使用者登出紀錄嗎?
會這樣問是因為,HTTP 網頁伺服器是種無狀態協議的架構,Server 只有在 Client 發送 Request 的時候,才知道有一個使用者送出了一個請求,那這樣不是只需要記錄 Request 和 Response 了些甚麼就好了嗎?
以上發問,謝謝。
網站該做使用者
登出功能
嗎?
該,使用者用不用是另一回事
安全性要求較高(例:網路銀行)還會做「閒置x分後自動登出」「關閉瀏覽器即登出」
網站該做使用者
登出紀錄
嗎?
記錄登出(時間)意義不大
除非網站是「以時間收使用費」
如果使用者是關閉瀏覽器,這該怎樣知道並記錄使用者已登出?如果是透過前端的事件 onbeforeunload 向 Server 丟一個登出的 Request,那麼連帶重新整理、關閉分頁也會將使用者登出了。
前端目前來說,離開頁面的相關事件,還是會有一定的機率不會發生作用。
大多數來說,還是利用了可用時長來處理了。
目前比較有效的作用是sock的方式。畢竟它的行為是一直連線。一但關閉了就會馬上知道離線了。
但SOCK會比較操機器,大多數來說,只會用在需要精確計算時間的網站。
如果使用者是閒置到逾時,這時候該如何紀錄登出?雖說這時使用者向 Server 發 Request 會被驗證是否逾時,可在此紀錄登出,但時間上就不會是閒置到逾時的當下時間。
大多數是不記錄或是無法記錄。這其實跟上一個問題是同樣的道理。
而且遇到逾時時間很長的人也沒啥用。
網站該做使用者登出紀錄嗎?
一般看需求性,但大多數來說是沒其必要性就是了。
畢竟登出有所謂的「自已登出」及「超時登出」及「異常登出」
其中如果是手動操作登出的話,記錄一下也無彷。反正這一定可以準確記錄。
但其它兩種就不太容易記錄,也無準確性可言。
所以大多數都是偏向不記錄為主。
後話:
其實我是有碰過有些業主的確會要求記錄登出。但因為登出的不明確性太多。
所以最後大多就是只依手動登出的為主。
某些網站會要求精確的離開時間。大多數都是會要求手按登出才算。
但難免還是會被會員會「噴」業主。
後續其實我用了兩種做法。
一種是使用SOCK的連接方式,也剛好客戶有聊天室的需求。所以原則上不擔心主機操的問題。
反正聊天室本身就會操了。
另外一種則是採用前端請求更新制。
當時我業主是希望還是能記錄,但允許我誤差5分內。
所以我改用了前端定時發送線上時間更新。
後端的部份則每分檢查一次處理
會想發此問題的原因,正如你文中所提的是有被要求記錄。當下收到這樣的要求,也是蠻詫異的,因而向對方稍微解釋了一下網頁運作的機制,希望對方能理解記錄登出的意義其實不大(網站為非營利、非金融或有金流的網站)
我之前的經驗給你參考。
基本手動的還是會做給他們。
關掉瀏覽器要做到能記錄,直接報3~5天工作日的價格。
且需要說明因為需要持續的檢查登出時機。
所以機器負載會增高。
如果客人想要做,做給他也沒關係。
畢竟必不必要也不是我們說的算。
客人覺得有必要就做給他。
但因考量該功能的設計成本會比較大。
就看客人願不願意花這筆錢。
我之前也有客人也要求這些事。一開始本來也是有跟他解釋。
後來就直接報價給他,他就嚇到了。
他原本以為只是很單純的記錄。
我是跟他說,登出跟登入不一樣。
登入很簡單,約1~2小時就能搞定。
登出不簡單。價差好幾倍。這樣你還想做嗎??
原來如此,感謝建言 XD
研究一下 Websocket,各套件都有實作 disconnect 的行為,再那時記錄即可。不過實作這個功能意思不大,如果是在線時間長有獎勵,使用者會掛網。除非如海棉大所說的情況才有意義。一般都是做用聊天室,某某使用者離開時在頻道理廣播給其它人知道。
另外的作法是排程計算線上 session 人數,已無更新最後時間的使用者即清除該 session,並記錄登出時間。你可以定 5 分鐘、 10 分鐘。雖不精確,但也足夠了。以這個做法,掛網無動作的也視為登出。如果是長時間看影片網站,可以搭配 heartbeat 設計,在背景弄個固定查使用者有沒有關掉瀏覽器。