簡體   English   中英

Flask session 在 Heroku 上的 Gunicorn 應用程序中,Flask 應用程序中的請求不持久

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM