为什么在cookie上设置/获取登录状态是个糟糕的主意?

时间:2014-01-16 21:50:05

标签: django cookies

我一直在寻找设置/获取登录状态的最佳做法,并遇到此one

在答案中,Yuji建议在cookie上设置或获取登录状态是一个糟糕的主意。 我只是好奇为什么这是一个糟糕的主意。

有人可以提供建议吗?

2 个答案:

答案 0 :(得分:1)

首先想到的是:cookie不可信任。

现在,Django确实提供了一个将用户数据存储在cookie中的系统...... cookie-based sessions ...它们不是默认值,但提供了选项。记下文档中的警告 - cookie中的数据是“已签名但未加密” - 这意味着用户(以及有权访问该cookie的任何人)可以以纯文本格式查看保存在cookie中的数据,但如果他们尝试为了改变数据,cookie将被视为无效。

(请注意,所有Django会话都使用cookie,但其他会话类型如database-backed sessions不会将您与用户会话关联的数据存储在cookie本身中,cookie只是一个令牌)

所以,鉴于可以在cookie中安全地存储数据,为什么我们会说“不要这么做”关于登录状态呢?

主要原因是,当Django提供标准,安全且经过深思熟虑的身份验证系统时,发明自己的半生不熟的登录方案毫无意义:
https://docs.djangoproject.com/en/dev/topics/auth/

如果您需要在客户端知道用户是否已登录,最常见的方法可能是将视图中的变量传递给模板,例如request.user.is_authenticated并呈现一些不同的HTML或写入将一个var输出到一个javascript块中。

仅在Javascript中,您还可以检查是否存在会话cookie。

答案 1 :(得分:0)

除了给出的答案:有些人倾向于使用饼干阻滞剂。

如果您在冲浪时清除Cookie,则可以更改状态。