cookie
的本质其实就是在浏览器端保存的键值对, 每当浏览器端发送一次请求, 都会将这些键值对附加在请求中并发送给服务器端.
**我们简单使用下python
中的cookie
: **
**home.py
文件: **
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tornado.web
class IndexHandle(tornado.web.RequestHandler):
def get(self):
username = self.get_argument('u', None)
if not username:
self.set_cookie('name', 'test')
self.set_secure_cookie('user', 'test')
self.redirect('/admin')
def post(self):
pass
class AdminHandle(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
name = self.get_cookie('name', None)
user = self.get_cookie('user', None)
print('name: ', name, "\nuser: ", user)
**start.py
文件: **
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tornado.web, tornado.ioloop
from controllers import home
if __name__ == '__main__':
settings = {
# 模板路径配置
'template_path': 'views',
"cookie_secret": 'test-secret,'
}
application = tornado.web.Application([
(r"/index", home.IndexHandle),
(r"/admin", home.AdminHandle),
], **settings)
application.listen(80)
tornado.ioloop.IOLoop.instance().start()
浏览器端检查`cookie`情况
服务器端输出`cookie`情况
-
self.set_cookie('name', 'test')
设置未加密的cookie
, 键为'name', 值为test
-
self.set_secure_cookie('user', 'test')
设置加密cookie
, 键为'user', 值为test
. 设置加密cookie
我们需要在配置中添加自定义的加密串(俗称对加密结果加盐)"cookie_secret": 'test-secret,'
-
name = self.get_cookie('name', None)
获取指定key
未加密的cookie
的值 -
user = self.get_cookie('user', None)
获取指定key
的加密后的cookie
的值 - 对于
set_cookie()
和set_secure_cookie()
都用以下常见参数-
name
表示传入cookie
的键
-
-
value
表示传入cookie
的name
对应的值 -
domain=None
表示域名 -
expires=None
设置过期时间, 这里单位为秒 -
path="/"
表示当前的cookie
在那些路径下有效,/
表示当前域名下所有的路径均有效 -
expires_days=None
设置过期时间, 单位为天
**接下来我们谈谈加密cookie
的加密和解密原理: **
- 解密时候将加密
cookie
中的base64(test)
也就是加密后的值和时间戳再加上cookie_secret
生成新的加密串和加密cookie
中的加密串比较, 若相同则合法验证通过, 然后再通过反解加密base64(test)
取其本来的值
网友评论