台灣最大程式設計社群網站
線上人數
1490
 
會員總數:245141
討論主題:189045
歡迎您免費加入會員
討論區列表 >> PHP >> 會員系統登出時間寫入資料庫問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
會員系統登出時間寫入資料庫問題
價值 : 50 QP  點閱數:921 回應數:5

樓主

小煥
門外漢
0 1
14 2
發送站內信


我用session來紀錄會員的登出或登入,當會員按登出鈕時(轉到logout.php執行)將會消除session並且抓取系統時間寫入資料庫,但是如果會員不經正常程序登出,如直接關閉瀏覽器
就不會轉到logout.php執行,導致我資料表登出時間欄位空白。爬文得知似乎可以用onbeforeunload解決,但是小弟是個新手不熟悉javascript,麻煩各位大大替小弟我解惑,感恩。



搜尋相關Tags的文章: [ php ] , [ session ] , [ 登出 ] , [ 登入 ] , [ onbeforeunload ] , [ javascript ] ,
本篇文章發表於2016-12-16 16:36
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

小煥
檢舉此回應
我用session來紀錄會員的登出或登入,當會員按登出鈕時(轉到logout.php執行)將會消除session並且抓取系統時間寫入資料庫,但是如果會員不經正常程序登出,如直接關閉瀏覽器
就不會轉到logout.php執行,導致我資料表登出時間欄位空白。爬文得知似乎可以用onbeforeunload解決,但是小弟是個新手不熟悉javascript,麻煩各位大大替小弟我解惑,感恩。
本篇文章回覆於2016-12-17 16:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
onbeforeunload這是一個沒有被標準化的事件,各瀏覽器的支援度不一
更重要的一個問題是,這個事件並不是關閉視窗,而是離開當前頁面
這代表超連結到其他頁面、送出表單、輸入新網址、上下頁等都會觸發此事件
另外你以session來判斷登入登出,這是很正常的作法
但是這同時也代表,當瀏覽者閒置過久時,session會消失
如此一來你同樣無法抓出登出時間

以我個人來說
我認為登出時間這個資料只能給出一個模糊大概的值,我會記錄最後開啟頁面的時間
如果要強求"精準",我也只能手一攤自承沒辦法
本篇文章回覆於2016-12-19 10:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

迷路
捐贈 VP 給 迷路 檢舉此回應
忘記回答你的問題
如果用onbeforeunload來做
我寫了個簡單的範例,只有將時間記錄在文字檔
你自己改成資料庫更新
test.html

test.php

本篇文章回覆於2016-12-19 10:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
就如你所知道的,如果用戶自行按登出的話,自然就可以去正常記錄時間。
問題就在於用戶並沒有按登出時的問題才麻煩。

大多數而言,我還是會採用雙向的方式。按登出還是會給與正常記錄。
但未按登出的情況下。(如直接關閉瀏覽器)。雖然有你說的onbeforeunload的方法可以使用。
但這個函數是一個很不安全的做法。
這樣說好了,onbeforeunload這個其實也是由瀏覽器來run的。但如果瀏覽器都不存在的情況下。它要怎麼run呢??

所以最好的處理方式,大多是會去記錄最後一次的動作後幾分內。就將其視為不在線上。
如何去記錄最後一次的動作??其實如果你是用session。因該會有一個地方來做session_start。
就在那邊取得session的同時順便記錄目前的時間就可以了。
本篇文章回覆於2016-12-20 18:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

小煥
檢舉此回應
感謝迷路跟浩瀚星空兩位大大,小弟我知道該怎麼做了,3Q !!!
本篇文章回覆於2016-12-20 20:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.