5 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
不需要記錄sessionid,你想用sessionid來記錄非正常退出最后一次操作時間?
針對同一個用戶登錄的上一條數(shù)據(jù)一定是退出操作
1.正常退出,下邊一條一定是登錄
2.普通操作(增刪改查)后非正常關(guān)閉,下一次也一定是登錄操作
所以一次登錄時間長度為本次登錄時間--下次登錄前一條記錄的時間
但是如果用戶非正常關(guān)閉后沒在登錄就需要單獨處理,比如sessionid20分鐘沒操作就過期,就查看最后一條記錄距離當(dāng)前是否超過20分鐘,超過就認(rèn)為已經(jīng)非正常退出。

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊
表可以這樣設(shè)計
用戶id 登錄時間 退出時間
登錄的時候,session中記錄登錄時間,同時把退出時間設(shè)置為:登錄時間+超時時間。
用戶活動的時候,根據(jù)session中記錄的登錄時間,去更新那條記錄的退出時間為:當(dāng)前時間+超時時間。
退出的時候,根據(jù)session中記錄的登錄時間,去更新那條記錄的退出時間為:當(dāng)前時間。

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
原始表(假設(shè)):
record_id uid name opr_type c_time
1 10 cxl land 2016-12-26 08:00:00
2 10 cxl out 2016-12-26 23:00:00
最終生成的表:
用戶名 日期(asc) 當(dāng)天第一次登陸時間 當(dāng)天最后一次登出時間 登陸時長(結(jié)果非準(zhǔn)確值)
cxl 2016-12-26 2016-12-26 08:00:00 2016-12-26 15:00:00 3小時10分
cxl 2016-12-27 2016-12-26 08:30:00 2016-12-26 23:00:00 6小時10分
具體流程:
1. 日期分組
2. 當(dāng)天第一次登陸時間
2.1 第一種情況:若當(dāng)天第一條記錄操作類型是 登出,那么 當(dāng)天第一次登陸時間 = 00:00:01
2.2 第二種情況:若當(dāng)天第一條記錄操作類型是 登陸,那么 當(dāng)天第一次登陸時間 = c_time
3. 當(dāng)天最后一次登出時間
3.1 第一種情況:若當(dāng)天最后一條記錄操作類型是 登陸,那么 當(dāng)天最后一次登出時間 = 23:59:59
3.2 第二種情況:若當(dāng)天最后一條記錄操作類型是 登出,那么 當(dāng)天最后一次登出時間 = c_time
4. 登陸時長
4.1 當(dāng)天最后一次登出時間 - 當(dāng)天第一次登陸時間
提供下思路哈,具體實現(xiàn)起來個人覺得很不容易(邏輯處理需用到php,分頁的時候也較麻煩,得按照日期進(jìn)行分頁顯示,而不能像 limit 1 , 10
這樣按取出的記錄數(shù)進(jìn)行分頁 ,單sql無法得出最終表結(jié)構(gòu)),所以,就只能到這兒了....

TA貢獻(xiàn)1876條經(jīng)驗 獲得超5個贊
借問題請教一下大家哈? 登陸可以記錄,登出怎么記錄呢? 用戶不一定真的就點登出按鈕啊。如果是web的話,用戶可以直接關(guān)閉瀏覽器就不關(guān)了,怎么知道什么時候登出的呢? session嗎?
添加回答
舉報