我正在用PHP进行练习项目(制作一个论坛),并尝试确定一种保持用户登录的机制。我创建了一个用户类,通过该用户类对用户进行身份验证(登录时) )以及所有未来与用户帐户相关的操作都将通过该类(即用户相关信息检索,用户发帖/评论等)。
为了让用户保持登录状态,最简单的方法似乎是使用会话并将用户对象存储在会话中(不是cookie,因为这会带来安全风险),但经过一些研究后我发现会话可以在系统上施加了巨大的负担,特别是如果在其中保存了大量数据。
在试图找到解决方案后,我想出了两个选择:
在会话中只放置用户ID,并且每次通过用户ID重新创建用户对象。然而,这似乎是一个糟糕的实现,因为每次都必须重新查询数据库。
在会话中保存用户ID(一旦用户成功登录),并将整个对象保存在cookie中,每次使用cookie之前,通过匹配用户ID来验证cookie与cookie中的用户ID进行会话。我不太确定cookie是如何工作的,但由于一些关键的用户信息可能存储在用户对象中(因此是cookie),这里存在某种安全风险吗?饼干可以被盗吗?
还有另一种选择更好吗?它是使用会话或cookie的不同方式,还是使用与会话和cookie完全不同的方法?
答案 0 :(得分:1)
我会选择:
- 在会话中仅放置用户ID,并通过用户ID每次重新创建用户对象。然而,这似乎是一个糟糕的实现,因为每次都必须重新查询数据库。
醇>
并启用MySQL query cache,这将使您的频繁查询更快。
如果您的数据很大,我不推荐$_SESSION
(但实际上这些数据有多大?)
答案 1 :(得分:1)
在开始你应该忘记2.选项。将关键数据保存在cookie中非常危险。
第一种选择要好得多。您需要选择:$ _SESSION或数据库中的数据。如果它是大对象,您可以序列化它们并发送到数据库中的blob字段。 或者另一个想法:将序列化数据保存在文件中,然后可以避免附加查询。但是当然还有另一个问题:许多IO文件操作。
考虑一下,测试一些选项然后你应该能够为你选择最佳选择。