Cookie的作用:
对于Cookie的定义:为了辨别用户身份,进行的会话追踪而存储在用户本地的数据。
Cookie的一个作用,就是进行状态保持;比如咱们在浏览淘宝网时,如果服务器和浏览器是一种无状态的形式,那么你每次登陆完淘宝网,再次刷新或者进入其他页面时,登陆信息就会丢失,需要重新进行登陆。也就是说,默认状态下,当用户在一次请求时,浏览器和服务器并不知道在这次请求之前这个用户进行过什么操作。
为了解决上面的无状态情形,就需要进行状态保持,那么状态保持在Flask中有两种方式:
- 在客户端存储信息:cookie
- 在服务器存储信息:session
Cookie的交互流程:
下面以用户登陆某个网站为例:
①:浏览器会发送请求登陆的报文
②:服务器接收到登录名和登陆密码之后,在判断无误之后,会生成cookie;在生成cookie之后,会和响应报文一起返回给浏览器。
生成cookie的代码如下(在响应中生成cookie),response.set_cookie(’键‘,’值‘):
# 需要导入 from flask import make_response
@app.route('/login')
def login():
response = make_response('success')
response.set_cookie('user_id', '11')
response.set_cookie('user_pwd', '123456')
return response
③浏览器接收到cookie后,会将cookie保存在浏览器本地;
在运行后,我们可以查询浏览器此时存在的cookie,如下图
④:浏览器再次请求时,会把这个cookie里面的内容带上,发送给服务器:
获取cookie的代码如下(cookie的获取在请求中获取),浏览器在访问服务器时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息;方法:request.cookies.get(键):
# 需要导入 from flask import request
# 能获取到的前提是,在获取之前已经生成了cookie,且没有被删除
@app.route('/')
def index():
user_id = request.cookies.get('user_id')
user_pwd = request.cookies.get('user_pwd')
return '%s:%s' % (user_id, user_pwd)
cookie生效时间的设定:
在set_cookie中加入【max_age=时间数值 】的参数即可,代码如下:
@app.route('/login')
def login():
response = make_response('success')
response.set_cookie('user_id', '11', max_age=60)
response.set_cookie('user_pwd', '123456', max_age=60)
return response
cookie的删除:
删除也是在响应中设置的,使用 delete_cookie(键)
@app.route('/logout')
def logout():
response = make_response('success')
response.delete_cookie('user_id')
response.delete_cookie('user_pwd')
return response
cookie的删除,如下图所示:
当再次进入界面时,cookie的数量就会显示为0 :
提示:
- Cookie基于域名安全,不同域名的Cookie是不能互相访问的
- 比如:在访问taobao.com时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到taobao.com写的Cookie信息;
- 浏览器的同源策略