Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome Chrome会话cookie对于数据库列太长_Google Chrome_Flask_Cookies_Flask Session - Fatal编程技术网

Google chrome Chrome会话cookie对于数据库列太长

Google chrome Chrome会话cookie对于数据库列太长,google-chrome,flask,cookies,flask-session,Google Chrome,Flask,Cookies,Flask Session,我正在使用实现服务器端会话cookie 该实现基本上工作正常,但在使用Chrome访问API时,我遇到以下错误: sqlalchemy.exc.DataError:(pymysql.err.DataError)(1406,“第1行'session\u id'列的数据太长”) 以下是my sessions表(flask_sessions_表)(由flask扩展生成)的模式: 我没有在任何其他主要浏览器(Firefox、Chromium、Safari、Postman等)上遇到过此错误。从Chrome

我正在使用实现服务器端会话cookie

该实现基本上工作正常,但在使用Chrome访问API时,我遇到以下错误:

sqlalchemy.exc.DataError:(pymysql.err.DataError)(1406,“第1行'session\u id'列的数据太长”)

以下是my sessions表(flask_sessions_表)(由flask扩展生成)的模式:

我没有在任何其他主要浏览器(Firefox、Chromium、Safari、Postman等)上遇到过此错误。从Chrome发送到我的烧瓶应用程序的会话cookie似乎太长(约300个字符,有时甚至约1200个字符),而从其他浏览器发送的会话cookie最多约为50个字符。请参见附件中的图片:

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

  • 将flask_sessions_table.session_id从varchar(255)转换为LONGTEXT。SQLAlchemy(ORM)似乎不支持文本类型
  • 截断并保存chrome cookie中的前255个字符。在保存会话cookie之前,似乎没有办法“拦截”请求:在执行请求路由上的语句之前,扩展立即保存cookie
  • 关于如何为Chrome解决此问题,还有其他想法吗?

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

    除了Firefox之外,我还有这个问题。我可以通过清除浏览器上的Cookie并重新启动Flask来解决此问题。

    您可以将服务器更改为发送以“开始”开头、以“结束”结尾的特殊Cookie吗?嗨@curiousguy,我可以在何时/何地在Flask服务器上根据每个请求执行此操作?另外,这个更改将引入/实现什么?我将直接更改生成cookie的代码。至少Cookie看起来不再是随机的。我希望我可以控制Cookie是如何生成的,但实际上不能,因此我描述了这个问题。我只是从客户端接收cookie并将它们存储在服务器端。我只能控制来自前端应用程序的cookies,但不能控制来自浏览器的cookies。它们要么由服务器发送,要么由JS代码设置。
    +------------+--------------+------+-----+---------+----------------+
    | 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    |                |
    +------------+--------------+------+-----+---------+----------------+