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)

これは常に「Nonesomething」を返しますが、2番目のリクエストに対して「somethingsomething」を返したいです。

4

4 に答える 4

0

データストアをセッション バックエンドとして使用していると仮定すると、これはおそらく結果整合性に関係しています。2 番目のリクエストを数秒間延期してからリクエストを試行すると、おそらくセッション データが表示され、それが証明されます。

に切り替えるとsecurecookie役立つかもしれませんが、何らかの理由でうまくいきませんでした...まだ調査中です。


私の問題の大部分は、Cookie の基準を知らなかったことが原因でした。これは、この他のスタックオーバーフローの質問で説明されています。

于 2014-08-03T08:36:09.623 に答える
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 に答える