2012-12-07 99 views
1

如何獲取webapp2中的會話ID?獲取webapp2會話ID

它似乎沒有記錄在任何地方,這對我來說並不是微不足道的。

我發現了一些解決方案,我在這個問題的答案中提出,但也許有人會發現更簡單或更好的解決方案。 無論如何,我認爲這可能是給別人

回答

1

我的解決方案看起來像這樣有用:

import webapp2 
from webapp2_extras import sessions 

class Test(webapp2.RequestHandler): 
    def get(self): 
     session_store = sessions.get_store(request=self.request) 
     cookie_name = session_store.config['cookie_name'] 
     session_id = self.request.cookies[cookie_name] 
     self.response.out.write('<html><body>') 
     self.response.out.write('Session id: %s' % session_id) 
     self.response.out.write("</body></html>") 
0

在你的榜樣,你不能得到會話ID,直到您刷新頁面。您應該創建一個認證頁面來創建會話。您還應該定義一個擴展dispatch()方法的基本處理程序,以啓動會話存儲並在請求結束時保存所有會話。閱讀documentation看一個例子:

class Main(main.BaseHandler): 
    def get(self): 
     if not self.session.get('user'): 
      self.redirect("/authenticate",abort=True) 
     session = self.request.cookies("session") 
     #more stuff........ 

class Authenticate(main.BaseHandler): 
    def get(self): 
     if self.session.get('user'): 
      self.redirect("/") 
    else: 
     self.render("authenticate.htm") 

    def post(self): 
     if self.session.get('user'): 
      self.redirect("/",abort=True) 

     post_param = {"username":self.request.get("username"), 
        "password":self.request.get("password")} 

     if not post_param["password"] or not post_param["username"]: 
      redirect("/authenticate") 

     mySql = dbLib.MySqlLib() 
     try: 
      mySql.query("SELECT password FROM users where username=%s", post_param["username"],)) 
      dbPassword = mySql.dbCur.fetchone()[0] 
     except dbLib.ProgrmmgError as error: 
      self.render("authenticate.htm",username = post_param["username"], 
              errorMessage = "Password and/or Username\ 
     else:             invalid") 
      if bcrypt.hashpw(post_param["password"],dbPassword) == dbPassword: 
       self.session['user'] = "root" 
       self.redirect("/") 
      else: 
       self.render("authenticate.htm",username = post_param["username"], 
               errorMessage = "Password and/or Username\ 
     mySql.close() 

app = main.webapp2.WSGIApplication([('/', Main), 
            ("/authenticate",Authenticate), 
            (".*",main.Error_404)], 
            debug=True) 
+0

你是對的。我只是沒有提到文件中的東西。我專注於那些不在那裏並且需要查看源代碼的東西 –