烧瓶send_file和send_from_directory导致会话cookie太大

时间:2020-08-27 19:23:55

标签: python flask cookies session-cookies

嗨,这是一个奇怪的问题。使用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还是我调用flask方法的方式的问题? .pdf文件不太大,只有十页。

1 个答案:

答案 0 :(得分:0)

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

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')