【Flask】Flask Cookie操作

### 什么是cookie:
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。
cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,
当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
1. cookie有有效期:服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie。
2. cookie有域名的概念:只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器。也就是说,访问谷歌的时候,不会把百度的cookie发送给谷歌。

### flask操作cookie:
1. 设置cookie:设置cookie是应该在Response的对象上设置。`flask.Response`对象有一个`set_cookie`方法,可以通过这个方法来设置`cookie`信息。
在Chrome浏览器中查看cookie的方式:
* 右键->检查->Network->重新加载页面->找到请求,然后查看Response Headers中的cookie
* 点击url输入框左边的信息icon,然后找到相应的域名,再展开查看cookie。
* 在Chrome的设置界面->高级设置->内容设置->所有cookie->找到当前域名下的cookie。
2. 删除cookie:通过`Response.delete_cookie`,指定cookie的key,就可以删除cookie了。

###Flask 设置/删除 cookie

 1 from flask import Flask, request, Response
 2 
 3 app = Flask(__name__)
 4 
 5 
 6 @app.route('/')
 7 def hello_world():
 8     resp = Response("saber's home")
 9     resp.set_cookie('username', 'saber')
10     return resp
11 
12 
13 @app.route('/del/')
14 def delete_cookie():
15     resp = Response("Saber's home 2")
16     resp.delete_cookie('username')
17     return resp
18 
19 if __name__ == '__main__':
20     app.run(debug=True)

 

######. 设置cookie的有效期:
* max_age:以秒为单位,距离现在多少秒后cookie会过期。
* expires:为datetime类型。这个时间需要设置为格林尼治时间,也就是要距离北京少8个小时的时间。
* 如果max_age和expires都设置了,那么这时候以max_age为标准。
* max_age在IE8以下的浏览器是不支持的。expires虽然在新版的HTTP协议中是被废弃了,但是到目前为止,所有的浏览器都还是能够支持,所以如果想要兼容IE8以下的浏览器,那么应该使用expires,否则可以使用max_age。
* 默认的过期时间:如果没有显示的指定过期时间,那么这个cookie将会在浏览器关闭后过期。

 1 from flask import Flask, request, Response
 2 from datetime import datetime, timedelta
 3 
 4 app = Flask(__name__)
 5 
 6 
 7 @app.route('/')
 8 def hello_world():
 9     resp = Response("saber's home")
10     # resp.set_cookie('username', 'saber', max_age=60)
11     # resp.set_cookie('username', 'saber', expires=datetime(2018, 4, 19, 14, 0, 0))
12     expires = datetime.now() + timedelta(days=30, hours=16)
13     resp.set_cookie('username', 'saber', expires=expires)
14     return resp
15 
16 if __name__ == '__main__':
17     app.run(debug=True)

 

#### 设置cookie有效域名

cookie默认是只能在主域名下使用。如果想要在子域名下使用,那么应该给`set_cookie`传递一个`domain='.hy.com'`,这样其他子域名才能访问到这个cookie信息。

 1 from flask import Flask, request, Response
 2 from datetime import datetime, timedelta
 3 from cmsviews import bp
 4 
 5 app = Flask(__name__)
 6 app.register_blueprint(bp)
 7 app.config['SERVER_NAME'] = 'hy.com:5000'
 8 
 9 
10 @app.route('/')
11 def hello_world():
12     resp = Response("saber's home")
13     # resp.set_cookie('username', 'saber', max_age=60)
14     # resp.set_cookie('username', 'saber', expires=datetime(2018, 4, 19, 14, 0, 0))
15     resp.set_cookie('username', 'saber', domain='.hy.com')
16     return resp
17 
18 if __name__ == '__main__':
19     app.run(debug=True)

 

posted @ 2018-04-19 22:11  小小易拉罐  阅读(3687)  评论(0编辑  收藏  举报