【问题标题】:Chrome session cookies too long for database columnChrome 会话 cookie 对于数据库列来说太长了
【发布时间】:2020-05-07 20:21:29
【问题描述】:

我正在使用Flask-Session 实现服务器端会话cookie。

该实现在很大程度上运行良好,但在使用 Chrome 访问我的 API 时遇到以下错误:

sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, "Data too long for column 'session_id' at row 1")

这是我的会话表 (flask_sessions_table) 的架构(由烧瓶扩展生成):

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| session_id | varchar(255) | YES  | UNI | NULL    |                |
| data       | blob         | YES  |     | NULL    |                |
| expiry     | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

我在任何其他主流浏览器(Firefox、Chromium、Safari、Postman 等)上都没有遇到此错误。看来从 Chrome 发送到我的基于 Flask 的应用程序的会话 cookie 太长(约 300 个字符,有时甚至约 1200 个字符),而从其他浏览器来看,它们最多约 50 个字符。请参阅此附加图片:

这个错误导致我的应用程序(API 服务器)崩溃,因为flask-session 无法在每个传入的请求上保存会话 cookie。我想到了以下解决方法,但它们不起作用:

  1. 将 flask_sessions_table.session_id 从 varchar(255) 转换为 LONGTEXT。 SQLAlchemy (ORM) 似乎不支持文本类型?
  2. 截断并保存 chrome cookie 中的前 255 个字符。在保存会话 cookie 之前似乎没有办法“拦截”请求:扩展程序会在我的请求路由上的语句执行之前立即保存 cookie

关于如何为 Chrome 解决此问题的任何其他想法?

更新: 我观察到,当域为“localhost”时,cookie 的长度超过 255 个字符,而从ngrok 访问相同的实例时,它们是正常的(~43 个字符)。 localhost 上的 Chrome 可能导致长会话 cookie 的原因是什么?

【问题讨论】:

  • 您可以更改服务器以发送以“begin”开头并以“end”结尾的特殊cookie吗?
  • 嗨@curiousguy,我什么时候/在哪里可以在Flask服务器上,在每个请求上做到这一点?此外,这种变化会引入/实现什么?
  • 我会直接更改生成 cookie 的代码。至少 cookie 不会再看起来随意了。
  • 我希望我可以控制 cookie 的生成方式,但实际上不能,因此我描述了这个问题。我只是从客户端接收 cookie 并将它们存储在服务器端。我只能控制来自前端应用的 cookie,但不能控制来自浏览器的 cookie
  • 浏览器不会发明 cookie。它们要么由服务器发送,要么由 JS 代码设置。

标签: google-chrome flask cookies flask-session


【解决方案1】:

我遇到了这个问题,除了 Firefox。我可以通过清除浏览器上的 cookie 并重新启动 Flask 来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多