我正在学习烧瓶,想要了解会话是如何运作的。 显然,服务器在客户端浏览器上存储已签名的cookie。 我已经使用
完成了这个过程sessions['mycookie'] = 'mycookievalue'
但是我无法在浏览器上找到cookie。我通常使用chrome开发人员工具在浏览器上列出cookie并运行命令:
document.cookie
当我设置cookie但当我通过会话设置时没有任何内容出现时,这是有效的。
答案 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的操作,它将在此处。您会注意到该值是加密的。
答案 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