flask / heroku 的会话总是空的

Sessions always empty with flask / heroku

我在 Heroku 上的应用程序出现问题,会话没有持续存在。具体来说,每次发出请求时,flask 的 SecureCookieSession 对象都是空的。将此与 运行 我在本地主机上的应用程序进行对比,其中 SecureCookieSession 的内容以它们应有的方式保留。

我也在使用 flask-login + flask-seasurf,但我很确定问题发生在 flask / gunicorn / heroku 之间。

以下是描述类似问题的三个问题:

  1. Flask sessions not persisting on heroku
  2. Flask session not persisting
  3. Flask-Login and Heroku issues

除了我不是在处理 AJAX 或这里的多个工作人员(这是一个单独的 heroku 免费测功机,在 Procfile 中只有一行)。我确实觉得使用 server side sessions with redis 或从 Heroku 切换到 EC2 之类的东西可能会解决我的问题。

另外,如果对 https://gitlab.com/collectqt/quirell/tree/develop 有帮助,这是我的 git 存储库。我正在用

测试会话内容
def _before_request(self):
    LOG.debug('SESSION REQUEST '+str(flask.session))

def _after_request(self, response):
    LOG.debug('SESSION RESPONSE '+str(flask.session))
    return response

在一些外部帮助下解决了问题,主要是通过更改密钥以使用我想出的随机字符串,而不是 os.urandom(24)

更改为服务器端 Redis 会话也有帮助,如果只是通过简化测试的话

为了防止其他人遇到这个问题,请检查 APPLICATION_ROOT 配置变量。我最近使用反向代理将 Flask 应用程序部署到 nginx 下的子目录,并设置 APPLICATION_ROOT 变量破坏了 Flask 的会话。因此,Cookie 未设置在正确的路径下。