我使用webapp2_extras设置会话变量。如果我在设置后打印变量,则值是正确的。还会进行save_sessions调用。但是,当我再次提出请求时,变量不会被设置。
大部分代码都来自webapp2 documentation:
import webapp2
from webapp2_extras import sessions
class BaseHandler(webapp2.RequestHandler):
def dispatch(self):
self.session_store = sessions.get_store(request=self.request)
try:
webapp2.RequestHandler.dispatch(self)
finally:
self.session_store.save_sessions(self.response)
@webapp2.cached_property
def session(self):
return self.session_store.get_session()
class MainHandler(BaseHandler):
def get(self):
foo = self.session.get('foo')
print foo
self.session['foo'] = 'bar'
foo = self.session.get('foo')
print foo
self.response.write(BaseHandler)
config = {}
config["webapp2_extras.sessions"] = {
"secret_key": "key",
}
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True, config=config)
这总是返回"没有什么"但是我希望它能够回归"什么东西"第二次请求。
答案 0 :(得分:2)
我知道这是一个相当古老的问题,但我遇到了同样的问题,这就是为我解决的问题。
我将webapp2配置对象更改为在auth param中添加。
过去是什么:
config = {}
config["webapp2_extras.sessions"] = {"secret_key": "key" }
app = webapp2.WSGIApplication([('/', MainHandler)], debug=True, config=config)
现在应该是:
config = {}
config["webapp2_extras.sessions"] = {"secret_key": "key" }
config["webapp2_extras.auth"] = {'session_backend': 'securecookie'}
app = webapp2.WSGIApplication([('/', MainHandler)], debug=True, config=config)
答案 1 :(得分:0)
查看我的配置我有这个来设置会话存储的位置(对于app引擎,配置与我理解的标准略有不同)
@webapp2.cached_property
def session(self):
# Returns a session using the default cookie key.
return self.session_store.get_session(name='mc_session',
factory=sessions_memcache.MemcacheSessionFactory)
也许尝试一下?否则你的代码看起来没问题,没有实际运行它。
您还需要此导入:
from webapp2_extras import sessions_memcache
答案 2 :(得分:0)
假设您使用数据存储区作为会话后端,这可能与最终的一致性有关。如果您尝试将第二个请求推迟几秒钟,然后尝试该请求,您可能会看到会话数据,并证明了这一点。
切换到securecookie
可能有所帮助,尽管由于某种原因它并不适合我...仍然在研究它。
我的问题很大一部分原因是我对cookie标准的无知。这在other stackoverflow question中进行了解释。
答案 3 :(得分:0)
我有类似的问题。为我修复的是将后端设置为与默认值(securecookie)不同。将它设置为memcache似乎对我有用。
@webapp2.cached_property
def session(self):
return self.session_store.get_session(backend="memcache")
我也在.auth
下的配置中设置了它。不确定这是否会覆盖backend
的{{1}}参数...
get_session