0

我正在用 PHP 做一个练习项目(创建一个论坛),并尝试决定一种保持用户登录的机制。我创建了一个用户类,通过它对用户进行身份验证(登录时)和所有未来的用户帐户相关操作将通过该类进行(即用户相关信息检索,当用户发表/评论时等)。

为了让用户保持登录状态,最简单的方法似乎是使用会话并将用户对象存储在会话中(不是 cookie,因为这会带来安全风险),但是在做了一些研究之后,我发现会话可以加载到系统上,特别是在其中保存大量数据的情况下。

在试图找出解决方案后,我想出了两种选择:

  1. 会话中只放用户ID,每次都通过用户ID重新制作用户对象。然而,这似乎是一个糟糕的实现,因为每次都必须重新查询数据库。

  2. 将用户ID保存在会话中(一旦用户成功登录),并将整个对象保存在cookie中,每次使用cookie之前,通过将会话中的用户ID与用户ID匹配来验证cookie曲奇饼。我不太确定 cookie 是如何工作的,但由于一些关键的用户信息可能存储在用户对象中(因此是 cookie),这里是否存在某种安全风险?饼干会被偷吗?

还有其他更好的选择吗?无论是使用会话或cookie的不同方式,还是使用与会话和cookie完全不同的方法?

4

2 回答 2

1

我会去:

  1. 会话中只放用户ID,每次都通过用户ID重新制作用户对象。然而,这似乎是一个糟糕的实现,因为每次都必须重新查询数据库。

并打开MySQL 查询缓存,这将使您的频繁查询更快。如果您的数据很大,我不建议您这样做$_SESSION(但这些数据实际上有多大?)

于 2012-06-05T15:18:32.763 回答
1

一开始你应该忘记2.选项。将关键数据保存在 cookie 中是非常危险的。

第一个选项要好得多。您需要选择:$_SESSION 或数据库中的数据。如果它是大对象,您可以将它们序列化并发送到数据库中的 blob 字段。或者另一个想法:将序列化的数据保存在文件中,这样就可以避免额外的查询。但是当然还有另一个问题:很多IO文件操作。

考虑一下,测试一些选项,然后您应该能够为您选择最佳选项。

于 2012-06-05T15:23:41.737 回答