【发布时间】:2015-09-08 04:19:40
【问题描述】:
我正在运行一个使用 Gunicorn 作为 Web 服务器的 Flask 应用程序。 整个项目部署到 Heroku。
过程文件
web: gunicorn app:app --log-file=-
Flask 会话是在服务器端实现的,flask.session 对象中只存储了一个会话 ID。
每当我尝试登录时,我首先会正确登录,但随后会被重定向到起始站点(应该是用户站点)。
LoginController.py
def login(form) :
User.session.set(User.getByLogin(form))
if User.session.exists() :
return redirect(Urls.home)
return redirect(Urls.login)
日志显示User.session.exists()返回True但在下一个方法中(重定向期间)...
HomeController.py
def view() :
if User.session.exists() :
return CourseController.view()
return render_template("home.html")
...同样的方法返回False。
User.session 对象
def exists(self) :
key = session.get("user_key")
user = self.users.get(key)
Log.debug("session::exists", user = user)
return user is not None
在所有以下请求中,用户是否随机登录。
这可能是什么原因?我听说过大的session 对象会导致数据丢失,但我只是在其中存储整数。
【问题讨论】:
-
当 gunicorn 与多个工人一起运行时,两个工人之间不会共享会话。当用户使用第一个工作人员登录时,用户会话仅与该工作人员有关。当用户尝试另一个请求时,它会转到其他工作人员,在那里它不会获取用户详细信息,并且会要求您再次登录。我们也面临同样的问题。我查看了独角兽,但没有得到任何好的解决方案。
-
这里有同样的问题(“出于某种原因,我存储会话的字典有时是空的,有时不是”)。大家有没有找到解决办法?
标签: python session heroku flask gunicorn