Php 我应该在Cookie中存储什么来实现;“记住我”;在用户登录期间

Php 我应该在Cookie中存储什么来实现;“记住我”;在用户登录期间,php,cookies,login,Php,Cookies,Login,我的网站有一个登录系统,存储在数据库中的用户详细信息是用户ID(每个用户和标识符都是唯一的)、电子邮件地址(唯一的)、显示名(不唯一的)、密码和成员自 现在我应该在饼干里储存什么?我在考虑只在cookie中存储用户ID,并注明过期日期,然后如果用户在注册后再次访问我的网站,请检查cookie并将其登录(在我看来,这是不正确的),如果他决定注销,请销毁cookie。 *一点解释也会很有帮助。谢谢PHP具有内置的会话管理功能,完全满足您的需求: 我不建议将用户id存储在cookie中。相反,您可以

我的网站有一个登录系统,存储在数据库中的用户详细信息是用户ID(每个用户和标识符都是唯一的)、电子邮件地址(唯一的)、显示名(不唯一的)、密码成员自
现在我应该在饼干里储存什么?我在考虑只在cookie中存储用户ID,并注明过期日期,然后如果用户在注册后再次访问我的网站,请检查cookie并将其登录(在我看来,这是不正确的),如果他决定注销,请销毁cookie。

*一点解释也会很有帮助。谢谢

PHP具有内置的会话管理功能,完全满足您的需求:


我不建议将用户id存储在cookie中。相反,您可以生成一个唯一的令牌,并将该令牌与数据库中的用户关联,然后在每个请求上检查并重新生成该令牌。同样,这有点多余,因为PHP中已经内置了会话管理

只需将cookie过期时间添加到2天或您希望记住用户并保存cookie的天数。

如果您使用只有您的应用程序知道的密钥进行签名,则只能将用户ID存储在cookie中。否则,用户可以将cookie更改为任何内容并以其他人的身份登录。因此,如果要存储用户id,还需要存储用户id与密钥的散列(理想情况下使用),并且当您要登录它们时,计算相同的散列并将其与cookie中的散列进行比较。另一个解决方案是生成一个随机令牌,将其存储在数据库中,并在cookie中使用。如果它足够长且随机,那么几乎不会有人猜到另一个人的令牌。

PHP'$\u SESSION会为您这样做。如果您喜欢完全控制,甚至可以编写自己的会话类

此处提供了一个小教程:

下面是一个使用mysql而不是php默认值(在/tmp中的文件)存储会话的小示例:

似乎您自己已经回答了这个问题,请存储用户ID。这不安全-请参阅下面的答案。您能对此做一点解释吗?谢谢!。但“带密钥的用户id”是什么意思呢。如果我是一个坏人,我把整个cookie都硬了,然后用这个哈希字符串假装我是登录的用户,服务器能知道我是错误的人吗?密钥的目的是确保你不能通过设置cookie以任何你想要的用户的身份“登录”。如果不知道密钥,就无法构造cookie。如果您为一个现有用户构建了整个cookie,那么您当然可以作为该用户登录。有几种方法可以防止这种情况:1)使cookie在一段时间后过期(将时间戳编码到cookie中),2)使cookie特定于某个IP地址(同样,在cookie中编码IP地址),3)使其特定于某个用户代理字符串(尽管这很容易伪造)-事实上还有更多的东西。另见: