Php 用户登录/记住我/禁止系统

Php 用户登录/记住我/禁止系统,php,Php,我现在知道,当用户登录时,他们的用户名和用户ID会保存在cookie中。由于这不是最安全的方法,我现在计划更改该方法 当用户登录时,一个唯一的令牌保存在cookie中。用户名、用户ID、禁用布尔值和唯一令牌存储在会话中。cookie中的令牌必须与要登录的会话中的令牌匹配 我考虑过将令牌存储在数据库中?在我的代码中,很多时候我很快就需要用户名和userid,因此在会话中存储对我来说是最合乎逻辑的想法,而不是总是查询数据库 不管怎样,我的方法合适吗?;如果没有,什么是经验证的方法?您的方法听起来很合

我现在知道,当用户登录时,他们的用户名和用户ID会保存在cookie中。由于这不是最安全的方法,我现在计划更改该方法

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

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


不管怎样,我的方法合适吗?;如果没有,什么是经验证的方法?

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

我的一个副本是“使用PHP维护状态的最好方法是使用内置的会话跟踪系统。”在编写自己的./P>之前,您应该考虑这一点。


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

也许我错过了什么,但如果您在使用登录时启动会话并从他们的帐户获取数据,为什么需要设置cookie?若系统仍然使用会话工作,那个么cookie中保存的内容并不重要。当用户使用cookie登录时,最好检查数据库中的信息。所以我应该只使用会话登录用户并忽略cookie?sesson将持续多长时间?否如果你想拥有“记住我”功能,你不能忽略cookies,而不是签入会话(可能已经过期),签入db或其他可以保证它仍然“活动”的地方。这是否会占用资源?当我需要用户名和用户ID时,我的代码中有很多实例。我是否必须不断查询数据库以获取用户名和用户ID?;还是在会话中保存用户名和用户ID?