2016-01-24 127 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