簡體   English   中英

在WebApp2 Python中使用會話

[英]Using Sessions with WebApp2 Python

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

返回會話,以便可以使用其中的數據

我不知道的是:

  • get_store()函數中的request=self.request是什么? 商店不能成為存儲會話的服務器數據庫中的常規商店嗎?
  • try,finally:爭取一點。 那里很困惑。
  • 我們是否需要明確擔心會話ID。 我將如何使用會話ID映射到數據庫中的用戶信息。 每個用戶都有一個對應的唯一會話ID。

如果有很多問題,我深表歉意,但是我很新,很迷茫。 我看了一些PHP會話教程,但進展不大。

感謝您提前提出任何答案。

  1. 這只是將self.request的當前值作為get_store的“ request”關鍵字參數傳遞。 我不知道該問題的第二部分意味着什么。

  2. 這只是確保即使try塊內(即,您的處理程序代碼內)發生異常,也會始終執行finally塊,因此會話存儲將始終被保存。

  3. 您應該與會話ID無關。 它們是完全不透明的。 它們只是與用戶存儲在其Cookie中的ID相關。 但是與用戶的關系則相反。 就像我在上一個問題中所說的那樣,您將在用戶登錄時將User記錄的db ID存儲在會話中。

問題1和2實際上都是標准的Python。 通過閱讀語言教程,您可能會受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM