这篇文章我们来聊聊Cookie和Session,网上有很多关于这两个知识点的描述,可惜的是大部分都没有示例代码,因此本文的重点在于示例代码。
环境
Python3.6.0 Bottle0.12.15
安装bottle
pip install bottle
python学习扣qun【 1004391443】,内有安装包和学习视频资料免费分享,好友都会在里面交流,分享一些学习的方法和需要注意的小细节,每天也会准时的讲一些项目实战案例,欢迎加入
Cookie
HTTP是一种无状态协议,简单来说就是如果A第一次访问了B服务器,那么A第二次访问B服务器时,B服务器并不知道这次访问是否还是来自A。B服务器只负责接收网络信息包,传递网络信息包。这样速度很快,但是很不方便,B服务器不会记录A的数据。
为此,人们发明了Cookie,Cookie利用了HTTP中的Headers字段
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 138 Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) ETag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Connection: close cookie: _zap=8aa393b0-cc62-4c6a
现在A每次访问时都带上cookie,B服务器就可以获得A的cookie,这样B服务器就能记住一些东西
假如说我们现在要统计A一共访问了几次B服务器,我们可以编写以下代码
cookie.py
扫描二维码关注公众号,回复:
6059198 查看本文章
from bottle import route, run, response, request @route('/hello') def hello(): count = request.get_cookie('visited') if count: increment = int(count) + 1 response.set_cookie('visited', str(increment)) return str(increment) else: response.set_cookie('visited', '0') return 'Hello, World' run(host='localhost', port=8080, debug=True)
需要说明一点:在整个传输过程中传输的是字符,如果传进去一个整数,那么会报错,因此数字必须转换为字符
执行 python cookie.py
Session
Session一般用于登录功能,我们利用Cookie实现了有状态的传输,那么完全可以设置一个id,每次访问的时候都会带上这个id,这样B服务器就能够识别是谁访问了
一般来说,拿到id之后会存储在数据库里面,为了方便起见,在这里只存储到字典里面
session.py
from bottle import route, run, response, request, redirect login_user = {} #用来存储登录状态的字典 @route('/login') def login(): key = hash("test password") login_user[key] = "test password" response.set_cookie('login', str(key)) return 'login successfuly!' @route('/logout') def logout(): key = request.get_cookie('login') login_user.pop(int(key), None) return 'logout successfuly!' @route('/logintest') def logintest(): key = request.get_cookie('login') if key is not None and int(key) in login_user: return 'login test successfuly!' else : return redirect('/beforelogin') @route('/beforelogin') def beforelogin(): return 'please login!' run(host='localhost', port=8080, debug=True)
执行
python session.py