【问题标题】:Flask sessions, where are the cookies stored?Flask 会话,cookie 存储在哪里?
【发布时间】:2016-09-01 07:18:08
【问题描述】:

我正在学习烧瓶并想了解会话的工作原理。 显然,服务器在客户端浏览器上存储了一个签名的 cookie。 我已经使用

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

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

document.cookie

这在我设置 cookie 时有效,但在我通过会话设置时没有任何结果。

【问题讨论】:

  • Flask 使用 KEY 'session' 在浏览器中存储会话 id
  • @HassanMehmood:默认实现将所有会话数据存储在(签名的)cookie中。

标签: python session cookies flask


【解决方案1】:

我在 3 年零 8 个月后发现了这个问题,因为我对它被修改或欺骗的事件感兴趣,以确保我的后端能够分辨出差异。

使用 chrome,使用 F12,选择应用程序选项卡,在存储下转到 Cookies。在 cookie 下,您会找到该网页,选择它,右侧将填充并假设您已完成创建会话 cookie 的操作,它将在那里。您会注意到该值已加密。

Picture showing the location of session cookie

【讨论】:

  • 感谢您的图片 :)
【解决方案2】:

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

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

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

document.cookie 将为您提供 mycookie=cookie_value

【讨论】:

    【解决方案3】:

    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 令牌。

    【讨论】:

    • Martijn,感谢您的回复。是的,这是有道理的。进入 chrome 设置后,我能够看到 cookie。
    • @Martijn Flask会话创建的cookie与您可以分配给Flask中的响应对象的“常规”cookie之间的唯一区别是存储在其中的数据吗?使用会话的 cookie 与创建 cookie 并通过 response.set_cookie(key/value) 附加到响应对象更好吗? flask.pocoo.org/docs/0.11/quickstart/#cookies
    • @Malvin9000 不同之处在于 Flask 已经为您解决了如何序列化数据结构的问题,以及处理了数据完整性。您可以自己做所有这些并直接存储在 cookie 中,但为什么要养狗并自己吠叫呢?除非您需要与其他系统共享 cookie,否则我会坚持使用会话。
    猜你喜欢
    • 2019-03-11
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2015-06-23
    • 2014-06-06
    相关资源
    最近更新 更多