1.什么是cookie:
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。
cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
2. cookie的有效期:
服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie。
3. cookie有域名的概念:
只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器。也就是说,访问百度的时候,不会把新浪网站的cookie发送给百度。
4.画个图演示Cookie的工作过程
1. 设置cookie:
设置cookie是在Response的对象上设置。
`flask.Response`对象有一个`set_cookie`方法,可以通过这个方法来设置`cookie`信息。
key,value形式设置信息
2.查看cookie信息
在Chrome浏览器中查看cookie的方式:
* 方式1.借助于 开发调式工具进行查看
* 方式2.在Chrome的设置界面->高级设置->内容设置->所有cookie->找到当前域名下的cookie。
3. 删除cookie:
方式1:通过`Response对象.delete_cookie`,指定cookie的key,就可以删除cookie了。
方式2:在客户端浏览器 人为的删除(清除浏览器浏览历史记录后,很多网站之前免密登录的都不好使了)
4. 设置cookie的有效期:
5. 设置cookie的有效域名:
演示代码如下:
from flask import Flask,request,Response app = Flask(__name__) @app.route('/') def hello_world(): resp = Response("SXT") #设置Cookie信息 resp.set_cookie('username','momo') resp.set_cookie('pwd','123456') return resp @app.route('/del/') def delete_cookie(): resp = Response("删除cookie") #删除Cookie信息 resp.delete_cookie('username') return resp if __name__ == '__main__': app.run(debug=True)
4. 设置cookie的有效期:
* max_age:以秒为单位,距离现在多少秒后cookie会过期。
* expires:为datetime类型。这个时间需要设置为格林尼治时间,相对北京时间来说 会自动+8小时
* 如果max_age和expires都设置了,那么这时候以max_age为标准。
* 默认的过期时间:如果没有显示的指定过期时间,那么这个cookie将会在浏览器关闭后过期。
注意:
max_age在IE8以下的浏览器是不支持的。
expires虽然在新版的HTTP协议中是被废弃了,但是到目前为止,所有的浏览器都还是能够支持,所以如果想要兼容IE8以下的浏览器,那么应该使用expires,否则可以使用max_age。
演示代码如下:
from flask import Flask,request,Response from datetime import datetime,timedelta app = Flask(__name__) @app.route('/createCookie/') def createCookie(): resp = Response("服务器端通过Response对象创建Cookie信息 并返回给客户端 并保存在客户端") #设置Cookie的有效期【存活时间】方式1 :max_age=以秒为单位【距离现在多少秒后cookie会过期】 # resp.set_cookie('uname',"momo",max_age=1200) #设置Cookie的有效期【存活时间】方式2 : expires= datetime类型。 #这个时间需要设置为格林尼治时间,相对北京时间来说 会自动+8小时 # ex = datetime(year=2019, month=2, day=28, hour=0, minute=0, second=0) ex = datetime(year=2019, month=2, day=27, hour=16, minute=0, second=0) # resp.set_cookie('uname', "momo", expires=ex) ex2 =datetime.now() + timedelta(days=30,hours=16) #如果max_age和expires都设置了,那么这时候以max_age为标准 # resp.set_cookie('pwd',"123456",max_age=300,expires=ex2) resp.set_cookie('pwd',"123456",expires=ex2) return resp if __name__ == '__main__': app.run(debug=True)
5. 设置cookie的有效域名:
cookie默认是只能在主域名下使用。
如果想要在子域名下使用,那么应该给`set_cookie`传递一个参数`domain='.momo.com'`,这样其他子域名才能访问到这个cookie信息。
代码演示如下:
from flask import Blueprint,request bp = Blueprint('cms',__name__,subdomain='cms') @bp.route('/') def index(): # request.args # request.form # request.files uname = request.cookies.get('uname') return uname or "没有获取到cookie"windows上的hosts文件如下:
from flask import Flask,Response,request from datetime import datetime,timedelta from cmsblueprint import bp app = Flask(__name__) app.register_blueprint(bp) app.config['SERVER_NAME'] = 'momo.com:5000' @app.route('/createCookie/') def createCookie(): resp = Response("服务器端通过Response对象创建Cookie信息 并返回给客户端 并保存在客户端") ex = datetime(year=2019, month=2, day=27, hour=16, minute=0, second=0) ex2 =datetime.now() + timedelta(days=30,hours=16) resp.set_cookie('pwd',"123456",expires=ex2) #给Cookie信息设置 存活时间 【有效域名---》子域名】 resp.set_cookie('uname', "momo", expires=ex,domain=".momo.com") return resp if __name__ == '__main__': app.run(debug=True)