web框架--tornado之cookie与session初识

cookie的本质其实就是在浏览器端保存的键值对, 每当浏览器端发送一次请求, 都会将这些键值对附加在请求中并发送给服务器端。

一、目录结构

web框架--tornado之cookie与session初识

二、main_pro.py

 #!/usr/bin/env python
# -*- coding: utf-8 -*- import tornado.ioloop
import tornado.web class IndexHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
# self.write("Hello, world")
t = self.get_cookie('auth')
if t == '':
self.render('index.html')
else:
self.redirect('/login') class LogoutHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
# self.write("Hello, world")
self.set_cookie('auth', '') #退出登录,将cookie信息清空
self.redirect('/login') class LoginHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
# self.write("Hello, world")
self.render('login.html', status_text='') def post(self, *args, **kwargs):
username = self.get_argument('username', None)
pwd = self.get_argument('password', None)
if username == 'yusheng_liang' and pwd == 'adm':
self.set_cookie('auth', '') #登录谁成功,设置cookie信息
self.redirect('/index')
else:
self.render('login.html', status_text='登录失败')
settings = {
'template_path': 'views', #视图模板路径
'static_path': 'static', #静态文件路径
} #路由映射,路由系统
def make_app():
return tornado.web.Application([
(r"/login", LoginHandler),
(r"/index", IndexHandler),
(r"/logout", LogoutHandler),
], **settings) if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

web框架--tornado之cookie与session初识

1)self.set_cookie('name', 'test') 设置未加密的cookie, 键为'name', 值为test

2)self.set_secure_cookie('user', 'test') 设置加密cookie, 键为'user', 值为test. 设置加密cookie我们需要在配置中添加自定义的加密串(俗称对加密结果加盐)"cookie_secret": 'test-secret,'

3)name = self.get_cookie('name', None)获取指定key未加密的cookie的值

4)user = self.get_cookie('user', None) 获取指定key的加密后的cookie的值

5)对于set_cookie()set_secure_cookie()都用以下常见参数value 表示传入cookiename对应的值name 表示传入cookie的键

6)domain=None 表示域名

7)expires=None 设置过期时间, 这里单位为秒

path="/" 表示当前的cookie在那些路径下有效, /表示当前域名下所有的路径均有效

expires_days=None 设置过期时间, 单位为天

自定义一个set_secure_cookie

 import tornado.ioloop
import tornado.web class BaseHandler(tornado.web.RequestHandler): def get_current_user(self):
return self.get_secure_cookie("login_user") class MainHandler(BaseHandler): @tornado.web.authenticated
def get(self):
login_user = self.current_user
self.write(login_user) class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.current_user() self.render('login.html', **{'status': ''}) def post(self, *args, **kwargs): username = self.get_argument('name')
password = self.get_argument('pwd')
if username == 'admin' and password == '':
self.set_secure_cookie('login_user', 'admin')
self.redirect('/')
else:
self.render('login.html', **{'status': '用户名或密码错误'}) settings = {
'template_path': 'template',
'static_path': 'static',
} application = tornado.web.Application([
(r"/index", MainHandler),
(r"/login", LoginHandler),
], **settings) if __name__ == "__main__":
application.listen()
tornado.ioloop.IOLoop.instance().start()

三、JavaScript操作Cookie

由于Cookie保存在浏览器端,所以在浏览器端也可以使用JavaScript来操作Cookie。

/*
设置cookie,指定秒数过期,
name表示传入的key,
value表示传入相对应的value值,
expires表示当前日期在加5秒过期
*/ function setCookie(name,value,expires){
var temp = [];
var current_date = new Date();
current_date.setSeconds(current_date.getSeconds() + );
document.cookie = name + "= "+ value +";expires=" + current_date.toUTCString();
}
 四、自定义一个session验证
 #!/usr/bin/env python
# -*- coding:utf- -*-
import tornado.web
import tornado.ioloop container = {}
class Session:
def __init__(self, handler):
self.handler = handler
self.random_str = None def __genarate_random_str(self):
import hashlib
import time
obj = hashlib.md5()
obj.update(bytes(str(time.time()), encoding='utf-8'))
random_str = obj.hexdigest()
return random_str def __setitem__(self, key, value):
# 在container中加入随机字符串
# 定义专属于自己的数据
# 在客户端中写入随机字符串
# 判断,请求的用户是否已有随机字符串
if not self.random_str:
random_str = self.handler.get_cookie('__session__')
if not random_str:
random_str = self.__genarate_random_str()
container[random_str] = {}
else:
# 客户端有随机字符串
if random_str in container.keys():
pass
else:
random_str = self.__genarate_random_str()
container[random_str] = {}
self.random_str = random_str # self.random_str = asdfasdfasdfasdf container[self.random_str][key] = value
self.handler.set_cookie("__session__", self.random_str) def __getitem__(self, key):
# 获取客户端的随机字符串
# 从container中获取专属于我的数据
# 专属信息【key】
random_str = self.handler.get_cookie("__session__")
if not random_str:
return None
# 客户端有随机字符串
user_info_dict = container.get(random_str,None)
if not user_info_dict:
return None
value = user_info_dict.get(key, None)
return value class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
self.session = Session(self)
上一篇:React Suite v3.0 正式版发布


下一篇:AJAX异步、sweetalert、Cookie和Session初识