[英]Flask session not persistent across requests in Flask app with Gunicorn on Heroku
我正在使用 Gunicorn 作為 web 服務器運行 Flask 應用程序。 整個項目部署到Heroku。
簡介
web: gunicorn app:app --log-file=-
Flask 會話在服務器端實現,只有 session id 存儲在flask.session
object 中。每當我嘗試登錄時,我首先正確登錄,但隨后被重定向到起始站點(應該是用戶地點)。
登錄控制器.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
但在下一個方法中(在重定向期間)......
家庭控制器.py
def view() :
if User.session.exists() :
return CourseController.view()
return render_template("home.html")
...相同的方法返回False
。
用戶.session object
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
object 會導致數據丟失,但我只在其中存儲整數。
看起來有兩個問題:
app.secret_key
不應設置為os.urandom(24)
因為每個worker都有另一個密鑰 在運行時將會話存儲在數據庫中而不是字典中可以解決問題。
我有類似的問題,但對我來說答案與餅干有關。 當我打開我的開發環境時,正在創建一個新會話,然后在google時創建另一個會話,並在成功登錄后創建一個新會話。
問題是我的SESSION_COOKIE_DOMAIN不正確,並且cookie域被設置為不同的主機。 為了我的本地開發目的,我設置了SESSION_COOKIE_DOMAIN ='127.0.0.1',並使用http://127.0.0.1 :來訪問它,它現在正常工作。
我有同樣的問題,在本地工作時工作,但在服務器上沒有任何作用。
當我將“app.secret_key”從“my_secret_key”更改為os.urandom(24)時發現我的測試用戶始終在 session 中,而另一個從未在 session 中設置。閱讀幾頁我確實嘗試添加cookie 的名稱
app.config['SECRET_KEY'] = os.urandom(24)
# this is important or wont work
app.config['SESSION_COOKIE_NAME'] = "my_session"
現在它按預期工作,我可以登錄 go 到其他網頁,注銷將從 session 中刪除密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.