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的有效期:
注意!!!!!!!! 如果 max_age 和expire 都设置了 已max_age为准
"""
resp.set_cookie('name','wy',max_age=60) # max_age = 60 指的是60s后过期
e = datetime.now()+ timedelta(days=1,hours=8)
resp.set_cookie('pwd','123',expires=e) # expires 指 指定到期的时间
代码如下
"""
session 和cookie 是为了处理http 中无状态
"""
"""
flask 设置cookie 和删除cookie
"""
from flask import Flask,Response
from datetime import datetime,timedelta
app = Flask(__name__)
@app.route('/')
def index():
return 'hello'
@app.route('/cookie')
def createcookie():
# 设置cookie
resp = Response('有服务端创建cookie 信息')
"""
注意!!!!!!!! 如果 max_age 和expire 都设置了 已max_age为准
"""
resp.set_cookie('name','wy',max_age=60) # max_age = 60 指的是60s后过期
e = datetime.now()+ timedelta(days=1,hours=8)
resp.set_cookie('pwd','123',expires=e) # expires 指 指定到期的时间
# 在服务端删除指定的 cookie信息
resp.delete_cookie('pwd') # 例如删除 pwd cookie信息 ,那第一次访问浏览器客户端响应收到的就一个name的cookie信息,之后在请求头中收到一个name的cookie信息
# 如何设置cookie信息的有效期
return resp
if __name__=='__main__':
app.run()
5. 设置cookie的有效域名:
cookie默认是只能在主域名下使用。
如果想要在子域名下使用,那么应该给`set_cookie`传递一个参数`domain='.momo.com'`,这样其他子域名才能访问到这个cookie信息。
代码如下
蓝图.py
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)