2016-01-24 125 views
2

我正在製作Flask Web應用程序,我嘗試使用 Flask中的會話對象來存儲數據;在我login路線我做這樣的事情:Flask會話:總是在請求上獲得新的會話,request.cookies總是爲空

session["loginID"] = "the login id" 
session["some_data"] = dict() 

做一個print session顯示值是否設置正確。

我的問題是:在另一個AJAX調用,我試着找回 some_data字典從session,但session是空的。

我試圖找到會發生什麼,在尋找瓶的源代碼,原來request.cookies總是空的我的請求,所以open_session 每次返回一個新的會話。

以下是相應的代碼:

def open_session(self, app, request): 
    s = self.get_signing_serializer(app) 
    if s is None: 
     return None 
    val = request.cookies.get(app.session_cookie_name) 
    if not val: 
     return self.session_class() 
    max_age = total_seconds(app.permanent_session_lifetime) 
    try: 
     data = s.loads(val, max_age=max_age) 
     return self.session_class(data) 
    except BadSignature: 
     return self.session_class() 

是否有人知道是什麼導致這種行爲?任何幫助將不勝感激。

回答

0

您必須爲ajax調用設置Cookie域。我不知道爲什麼,但我知道這很重要。

http://flask.pocoo.org/docs/0.10/config/

+1

不,不是這樣。事實證明,憑證必須通過AJAX請求從Web瀏覽器傳遞到服務器,否則會話信息不會發送回Flask;所以在我的情況下,解決方法是在'fetch()'調用選項中將'credentials'設置爲'include'。還是要謝謝你的幫助。 – mguijarr