Flask会话,cookie存储在哪里?

时间:2016-05-06 09:16:32

标签: python session cookies flask

我正在学习烧瓶,想要了解会话是如何运作的。 显然,服务器在客户端浏览器上存储已签名的cookie。 我已经使用

完成了这个过程
sessions['mycookie'] = 'mycookievalue'

但是我无法在浏览器上找到cookie。我通常使用chrome开发人员工具在浏览器上列出cookie并运行命令:

document.cookie

当我设置cookie但当我通过会话设置时没有任何内容出现时,这是有效的。

3 个答案:

答案 0 :(得分:8)

Flask会话cookie具有httponly flag集,使其在JavaScript中不可见。

它是一个普通的常规cookie,因此它仍然存储在浏览器cookie存储中;你仍然可以在浏览器的开发者工具中看到它。

如果您希望能够从JavaScript代码访问Cookie值,可以将SESSION_COOKIE_HTTPONLY选项设置为False。来自Builtin Configuration Values section

  

SESSION_COOKIE_HTTPONLY
  控制是否应使用httponly标志设置cookie。默认为 True

Cookie包含所有会话数据,使用JSON序列化(带有对更广泛Python类型的标记支持),以及加密签名,确保数据不会被安全篡改。

如果禁用httponly保护,任何JS代码仍然可以解码并读取所有会话数据。即使它无法改变这些值,恶意代码仍然可能非常有趣。想象一下,您的网站中的XSS错误会变得更糟,因为JS代码只能直接从会话中读取用于保护Web表单的CSRF令牌。

答案 1 :(得分:2)

3年零8个月后,我发现了这个问题,因为我有兴趣对其进行修改或欺骗,以确保我的后端能够分辨出这个问题。

使用Chrome浏览器,使用F12,选择“应用程序”标签,然后在“存储”下转到“ Cookies”。在Cookie下,您会找到该网页,将其选中,然后将填充右侧,并假设您已经做了一些创建会话Cookie的操作,它将在此处。您会注意到该值是加密的。

Picture showing the location of session cookie

答案 2 :(得分:0)

会话仅供服务器使用。这就是为客户隐藏和加密的原因。 如果要设置可供客户端/浏览器使用的cookie。您只需设置一个普通的cookie而不是安全的cookie(如会话)。

您可以通过修改响应来设置Cookie。

def home_page():
   resp = make_response(...)
   resp.set_cookie('my_cookie', 'cookie_value')
   return resp
浏览器上的

document.cookie 会为您提供 mycookie = cookie_value