python学习笔记 - secure cookie@tornado 学习记录一

Tornado使用Cookie-based seesion来管理user auth,参考文档需要注意以下事项:

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


如果有理解不正确的地方,请大家帮忙予以指正, :)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值