簡體   English   中英

使用PHP會話ID,cookie +數據庫跟蹤用戶

[英]Keeping track of users with PHP session id, cookie + database

對於如何處理會話,我在這里有一點疑問。

現在,我有一個MySQL數據庫,其中“users”表有一個session_id字段。 如果為NULL,則用戶未登錄? 如果該值與PHPSESSID cookie的值相同,則表示該用戶已登錄。

我不知道為什么,但我不知何故覺得這不足以確定我正在處理哪個用戶。 有什么我想念的,還是我的恐懼沒有根據?

就我所看到的而言,你所描述的並沒有什么本質上的錯誤。

當然,您的登錄和注銷機制需要在登錄或注銷時可靠地添加和刪除用戶ID。 (僅在密碼匹配時插入用戶名等)。 此外,需要可靠地刪除過期的會話。 如果給出,這應該沒問題。

只是Pekka所說的擴展,你還可以在你的表中包含一個“最后一次看到”字段並將其用作判斷因為正如Pekka提到過期會話一樣,你的數據庫不會被告知它們已經消失了。 所以你將被迫做出一些東西,所以它手動檢查用戶最后一次在那里或那些線上的東西,然后將其映射回會話超時(我相信默認情況下為15-30分鍾)和然后在這段時間之后,清除在最后X分鍾內沒有活動的任何用戶。

考慮上述選項 - 在用戶表中跟蹤用戶只允許每個用戶1個會話。 我建議將數據存儲在名為sessions的表中,並包含以下列:

sess_id | sess_userid | sess_ipv4 | sess_lastseen(datetime / timestamp)| sess_sessionid(varchar)

我相信這將允許用戶進行多次登錄,但具有不同的會話ID,即使他們共享相同的公共IP,允許筆記本電腦,平板電腦,手機等 - 這樣,您可以單獨跟蹤單個用戶的每個設備。

希望這可以幫助!

上周發表的另一篇文章表明,他們正在進行一場盛行和節目,並確保你正在為正確的用戶分配一個新的會話(每15分鍾?)。 將會話從舊到新交換並將prev會話存儲為支票 - 不確定這是否會有所幫助,但我認為id會提及它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM