1

如何在 webapp2 中获取会话 ID?

它似乎没有记录在任何地方,对我来说也不是微不足道的。

我找到了一些解决方案,我在这个问题的答案中提出了这些解决方案,但也许有人会找到更简单或更好的解决方案。无论如何,我认为这对某人有用

4

2 回答 2

2

我的解决方案如下所示:

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>")
于 2012-12-07T09:26:29.270 回答
0

在您的示例中,您无法获取会话 ID,直到您刷新页面。您应该制作一个身份验证页面来创建会话。此外,您应该定义一个扩展 dispatch() 方法的基本处理程序,以启动会话存储并在请求结束时保存所有会话。阅读文档查看示例:

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)
于 2013-03-22T19:08:28.127 回答