簡體   English   中英

使用會話ID訪問會話數據

[英]Accessing session data with a session ID

有人告訴我,將密碼,用戶名和用戶ID之類的內容存儲在cookie中是不安全的,而應該將sessionID存儲在cookie中。 這是我迷路的地方。

我的目標是擁有基本的“記住我”功能。 通常,我會將用戶登錄信息存儲在cookie中,但是由於這是不安全的,所以我想知道替代方法是什么。 我了解每次創建會話都會創建一個cookie,該cookie會創建一個唯一的ID,但是在我關閉瀏覽器時會過期。 那么,在瀏覽器關閉后如何訪問此會話信息?

感謝所有幫助。

這可能是一個相當陡峭的學習曲線。 您是否考慮過使用現有的CMS或其他解決方案來實現所需的功能,甚至考慮使用可能包含此功能的框架?

對於“記住我”功能,您可以發送包含用戶ID和該用戶哈希密碼的哈希值的Cookie,該哈希值將再次使用一些已知但秘密的令牌進行哈希處理。 但是,該解決方案不允許您遠程終止某人的登錄名,而無需重置某人的密碼。

因此,另一種方法是為該人的登錄生成唯一令牌,並具有另一個將該唯一令牌與特定用戶和到期日期相關聯的數據庫表。

如建議的那樣,大多數第三方應用程序可能會采取的最佳方法是使用以下字段創建“ user_sessions”數據庫表:

session_id (var_char)
user_id (int)
ip_address (var_char)
last_logged_in (unix timestamp)

然后使用Cookie存儲您喜歡的md5哈希,可能是:

md5($username.$ip); //since md5 has a lot of reverse look ups now you should use a number of fields to validate. You could use a different crypto function to make it more difficult to crack, but md5 is the simplest version available in all php versions.

編輯:然后,您將從cookie中存儲的哈希與數據庫session_id進行比較,以查看它們是否已經登錄。在md5函數中合並幾個字段的原因是創建一種不太“可猜測的”哈希格式。 這樣一來,某人便能夠編輯Cookie並以其他人的身份登錄的可能性較小。

可以為所有用戶完成此操作(通過這種方式,您可以跟蹤誰在線),並且只需在Cookie中設置“永久”登錄變量即可。 例如。

p_login=true || p_login=false

這樣,您將知道是自動登錄還是強制登錄。

注意:您可以查看http://www.openwall.com/articles/PHP-Users-Passwords ,以其他方式來哈希密碼,session_id和用戶。

暫無
暫無

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

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