0

我目前拥有它,当用户登录时,他们的用户名和用户 ID 会保存在 cookie 中。由于这不是最安全的方法,我现在打算改变方法;

当用户登录时,cookie 中会保存一个唯一的令牌。用户名、用户 ID、禁止布尔值和唯一令牌存储在会话中。cookie 中的令牌必须与要登录的会话中的令牌相匹配。

我考虑过将令牌存储在数据库中吗?在我的代码中很多时候我很快就需要用户名和用户 ID,因此存储在会话中对我来说是最合乎逻辑的想法,而不是总是查询数据库。

无论如何,我的方法合适吗?如果没有,什么是行之有效的方法?

4

1 回答 1

0

你的方法听起来很合适。我不清楚您计划将会话对象存储在哪里,但我认为将其存储在数据库的会话表中是可以的。确实,这需要数据库查询以在呈现每个页面之前从数据库中检索会话(例如,如果会话令牌错误,您可能希望重定向到登录页面),但根据我的经验,这不是性能问题. 作为奖励,一旦您有了会话表,您就可以在其上运行有趣的查询来跟踪 Web 应用程序的使用情况。

我的Programming PHP副本说“使用 PHP 维护状态的最佳方法是使用内置的会话跟踪系统。” 在编写自己的代码之前,您应该考虑到这一点。

无论您采用哪种方法,您都应该确保会话令牌是随机生成的,并在合理的时间后过期。否则,攻击者可以通过猜测来伪造会话令牌,或者窃取其他人的会话令牌并劫持他们的会话。

于 2012-07-18T19:06:07.250 回答