浏览 6249 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-06
最后修改:2011-03-06
1. RequestHandler self.current_user 默认情况是None。 2. 实现用户权限管理,我们需要在你的request handler重写get_current_user()来判断(获得)当前合法用户。 由于Cookie是浏览器选项,用户可以选择禁用Cookie,那该如何判断用户浏览器是否禁用Cookie? 我的思路是在用户第一次request GET的时候,在对应的response中设置一个任意的Cookie值,“checkflag”,这样在接下来的第二次request GET/POST的HTTP Header将包含“Cookie”的信息,禁用Cookied的浏览器在HTTP Headers是不会有“Cookie”信息 我这里根据tornado user authentication 示例代码稍作修改,当用户浏览器禁用Cookie的时候给予一定的提示信息: import tornado.httpserver import tornado.ioloop import tornado.web class BaseHandler(tornado.web.RequestHandler): def get_current_user(self): return self.get_secure_cookie("user") class MainHandler(BaseHandler): def get(self): if not self.current_user: self.redirect("/login") return name = tornado.escape.xhtml_escape(self.current_user) self.write("Hello, " + name) class LoginHandler(BaseHandler): def get(self): self.set_cookie("checkflag", "true") self.render("templates/logintest/login.html") def post(self): if not self.request.headers.get("Cookie"): self.render("templates/logintest/require_enable_cookie.html") return self.set_secure_cookie("user", self.get_argument("name")) self.redirect("/") application = tornado.web.Application([ (r"/", MainHandler), (r"/login", LoginHandler), ], cookie_secret="hello") if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8081) tornado.ioloop.IOLoop.instance().start() <html> <body> <form action="/login" method="post"> name: <input type="text" name="name"/> <input type="submit" value="Sign in"/> </form> </body> </html> Please enable your Cookie option of your browser. 说明: 当首次访问"/"的时候,要求进行用户登录,这里用一个输入框来模拟用户登录,在重定向的"/login" GET对应的response中,提供一个任意“checkflag”cookie值,这样如果用户enable cookie,在下次的http GET/POST请求headers中将会带有“Cookie”信息,否则提供相关的页面信息。 一些Cookie-based session知识: Cookie-based session 数据是存储在客户端,集群和故障转移是不需要的,在需要的情况下你可以重启servers而不必担心session数据的丢失 Cookie-based session 用户可以访问不同的servers,而不需要被绑定在某一个数据环境(每次的http请求都要求constant querying) Cookie-based session 只会消耗少量的CPU周期用于校验,任何集中session存储势必会带来一定的瓶颈,即使你保持session data在内存中,这样只会将这些数据绑定在单一的机器上。 Cookie-based session 适用保存一些少量、关键数据,同时需要考虑cookie的一些限制,例如浏览器禁用cookie。 我有试过Gmail,126.com (一些SSL站点)都是需要enable cookie 如果有理解不正确的地方,请大家帮忙予以指正, ![]() 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-11
谢谢,跟着你一起学
|
|
返回顶楼 | |
发表时间:2011-03-12
ryebread 写道 谢谢,跟着你一起学
呵呵,一起学习、分享 ![]() |
|
返回顶楼 | |