我正在用 PHP 做一个练习项目(创建一个论坛),并尝试决定一种保持用户登录的机制。我创建了一个用户类,通过它对用户进行身份验证(登录时)和所有未来的用户帐户相关操作将通过该类进行(即用户相关信息检索,当用户发表/评论时等)。
为了让用户保持登录状态,最简单的方法似乎是使用会话并将用户对象存储在会话中(不是 cookie,因为这会带来安全风险),但是在做了一些研究之后,我发现会话可以加载到系统上,特别是在其中保存大量数据的情况下。
在试图找出解决方案后,我想出了两种选择:
会话中只放用户ID,每次都通过用户ID重新制作用户对象。然而,这似乎是一个糟糕的实现,因为每次都必须重新查询数据库。
将用户ID保存在会话中(一旦用户成功登录),并将整个对象保存在cookie中,每次使用cookie之前,通过将会话中的用户ID与用户ID匹配来验证cookie曲奇饼。我不太确定 cookie 是如何工作的,但由于一些关键的用户信息可能存储在用户对象中(因此是 cookie),这里是否存在某种安全风险?饼干会被偷吗?
还有其他更好的选择吗?无论是使用会话或cookie的不同方式,还是使用与会话和cookie完全不同的方法?