6

我正在使用 webapp2_extras 设置会话变量。如果我在设置变量后打印该变量,则该值是正确的。还进行了 save_sessions 调用。但是,当我再次发出请求时,变量没有设置。

大部分代码取自webapp2 文档

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)

这总是返回“None something”,但我希望它为第二个请求返回“something something”。

4

4 回答 4

2

我知道这是一个相当古老的问题,但我遇到了同样的问题,这就是为我解决的问题。

我更改了 webapp2 配置对象以添加到 auth 参数中。

曾经是什么:

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)
于 2014-02-05T11:13:05.193 回答
0

我有一个类似的问题。为我解决的问题是将后端设置为不同于默认值(securecookie)。将其设置为 memcache 似乎对我有用。

    @webapp2.cached_property
        def session(self):
        return self.session_store.get_session(backend="memcache")

我还在.auth. 不确定这是否会覆盖backend参数get_session...

config["webapp2_extras.auth"] = {'session_backend': 'memcache'}
于 2014-11-14T12:16:00.540 回答
0

查看我的配置,我有这个来设置会话存储的位置(对于应用引擎,配置与我理解的标准有点不同)

    @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

Webapp2 Memcache 会话

于 2012-12-11T11:06:51.213 回答
0

假设您使用数据存储作为会话后端,这可能与最终一致性有关。如果您尝试将第二个请求推迟几秒钟,然后尝试该请求,您可能会看到会话数据,这就是证明。

切换到securecookie可能会有所帮助,尽管由于某种原因它对我不起作用......仍在研究它。


我的问题的很大一部分实际上是由于我对 cookie 标准的无知。这在另一个 stackoverflow question中有解释。

于 2014-08-03T08:36:09.623 回答