什么应该存储在登录系统的cookie中?

时间:2009-09-11 13:35:03

标签: php security session cookies login

存储在cookie中以保持持久登录状态的最佳方法是什么?

我见过许多网站(以及初学者教程!),只是在cookie中存储了类似validUser = 1的内容。很明显,我可以欺骗它,网站会认为我是一个有效的用户。

如果用户名存储在cookie中,我可以通过在我的请求中发送带有他/她用户名的cookie来伪装成任何用户。

因此,如果您在cookie中存储用户名密码,那么我必须知道用户名和密码才能登录。实际上,用户已自动登录 - 就像保存密码一样他的浏览器。无需每次都自己在凭证箱中输入凭证,浏览器会自动发送每个页面请求。

但这仍然是一个坏主意吗?存储纯文本密码不是一个好主意,但这是在登录时如何在POST数据中发送。此外,它可以存储哈希。但我仍然觉得不舒服。

可能不应使用cookie来存储除会话ID之外的任何内容,并且用户数据存储在服务器本身上。这可能是一个更安全的位置,假设服务器没有共享。

看一些开源软件,比如论坛软件,他们使用的是一个更复杂的系统,但我无法完全理解通过浏览代码所做的工作。

标准的“最佳做法”是什么?

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

最佳做法是使用SESSION代替COOKIE来使用数据。 COOKIES用于存储通用信息,而不是用户的特定信息,这就是SESSIONS的用途。

答案 2 :(得分:0)

最佳做法是存储随机生成的会话ID。然后,会话将存储用户ID或您需要存储的任何其他内容。在PHP中,session_start()方法自动生成会话ID和名为PHPSESSID的cookie,因此您只需担心将数据存储在$ _SESSION数组中,而不是存储在cookie中。

答案 3 :(得分:0)

唯一应该在cookie中的是由PHP生成的sessionid(这是在使用会话时自动完成的)。您不应该在cookie中存储任何内容,除非是为了“记住我”复选框而记住的用户名。