在WebApp2 Python中使用会话

时间:2015-11-25 16:36:52

标签: python session webapp2

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 Login(BaseHandler):
    def get(self):

        self.session['foo'] = 'bar'
        foo = self.session.get('foo')

我只是在用户登录后尝试创建一个基本的登录会话。但是我已经研究了很长一段时间没有运气了。

我的想法是:

    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()

返回会话以便可以使用内部数据

我不知道的事情:

  • request=self.request函数中的get_store()是什么?商店不能成为存储会话的服务器数据库中的一般商店吗?
  • try,finally:位是什么?非常困惑。
  • 我们是否必须明确担心会话ID。如何使用会话ID映射到数据库中的用户信息。每个用户是否都有相应的唯一会话ID。

如果有很多问题,我道歉,但我很新,很遗憾。我看了一些PHP会话教程,但没有取得很大进展。

提前感谢您的任何答案。

1 个答案:

答案 0 :(得分:1)

  1. 它只传递self.request的当前值作为get_store的“request”关键字参数。我不知道那个问题的第二部分意味着什么。

  2. 这只是确保即使在try块中发生异常(即在处理程序代码中),也会始终执行finally块,因此将始终保存会话存储。

  3. 您不应该对会话ID做任何事情;它们完全不透明。它们只与用户在cookie中存储的ID相关。但与用户的关系却是另一回事;正如我在上一个问题中所说,你会在登录时将会话记录的数据库ID存储在会话中。

  4. 问题1和2都只是标准的Python;你可能会从语言教程中受益。