我应该在cookie中存储什么以在用户登录时实现“记住我”

时间:2009-12-07 07:43:29

标签: php cookies login

我的网站有一个登录系统,存储在数据库中的用户详细信息是 userid (每个用户和标识符都是唯一的),电子邮件地址(唯一),显示名称(非唯一),密码 membersince
现在我应该在饼干中存储什么?我正在考虑将用户ID存储在cookie中,并且过期日期,然后如果用户在注册后重新访问我的网站,检查cookie并将其登录(哪种看起来不对我)并销毁cookie如果他决定退出。
*一点点解释也会非常有帮助。感谢

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

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

http://us.php.net/manual/en/book.session.php

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

答案 2 :(得分:0)

PHP'$ _SESSION为你做这件事。如果您想完全控制,甚至可以编写自己的会话类。

这里有一个小教程: http://www.tizag.com/phpT/phpsessions.php

这是一个使用mysql存储会话而不是php默认(/ tmp中的文件)的小例子: http://www.hawkee.com/snippet/2018/

答案 3 :(得分:-2)

只需将Cookie过期时间设置为2天或您想要记住用户的天数并保存Cookie。