【问题标题】:Flask send_file and send_from_directory cause session cookie to be too large烧瓶 send_file 和 send_from_directory 导致会话 cookie 太大
【发布时间】:2020-12-16 17:54:29
【问题描述】:

您好,这是一个奇怪的问题。当使用flask run 运行时,它不会在我的本地服务器上发生,但是当使用 gunicorn 和 nginx 时,我使用烧瓶 send_file() 方法或 send_from_directory() 来允许用户下载 .pdf 文件我因以下错误而崩溃:

/home/ben/newvenv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py:479: UserWarning: The "b'session'" cookie is too large: the value was 10004 bytes but the header required 26 extra bytes. The final size was 10030 bytes but the limit is 4093 bytes. Browsers may silently ignore cookies larger than this.
  samesite=samesite,

这是我调用此方法的代码:

return send_from_directory(directory= directory,filename=filename, as_attachment=True)

我尝试更新我的 nginx 配置以允许更大的 cookie,但这不起作用,也不是一个理想的解决方案。我错过了什么?这是 nginx 的问题还是我调用烧瓶方法的方式? .pdf 文件不大,只有十页长。

【问题讨论】:

    标签: python flask cookies session-cookies


    【解决方案1】:

    我通过在发送文件之前清除会话来解决此问题。这是我用来清除会话变量的代码:

    def clear_session_variables(exclude=[]):
        """deletes all session variables. Useful to reset before starting new task."""
        print(list(session.keys()))
        for key in list(session.keys()):
            if(key != '_flashes' and key != 'csrf_token' and key not in exclude):
                print(key)
                session.pop(key)
        print(list(session.keys()))
    

    这里是我调用方法的地方:

    clear_session_variables(exclude=['db','historical'])
    return send_from_directory(directory= directory,filename=filename, as_attachment=True, mimetype='application/pdf')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多