HTTP是无状态的协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对方状态的信息。但是对于某些Web程序来说,客户端的某些信息有必须被记住,比如用户的登录状态,这样才可以根据用户的状态来返回不同的响应。为了解决这类问题,就有了Cookie技术。Cookie技术通过在请求和响应报文中添加Cookie数据来保存客户端的状态信息。
Cookie指Web服务器为了存储某些数据(比如用户信息)而保存在浏览器上的小型文本数据。浏览器会在一定时间内保存它,并在下一次向同一个服务器发送请求时附带这些数据。Cookie通常被用来进行用户会话管理(比如登录状态),保存用户的个性化信息(比如语言偏好,视频上次播放的位置,网站主题选项等)以及记录和收集用户浏览数据以用来分析用户行为等。
在Flask中,如果想要在响应中添加一个cookie,最方便的方法是使用Response类提供的set_cookie()方法。要使用这个方法,我们需要先 使用make_response()方法手动生成一个响应对象,传入响应主体作为 参数。这个响应对象默认实例化内置的Response类。
Response类的常用属性和方法
headers 一个Werkzeug的Header对象,表示响应首部,可以像字典一样操作
status 状态码,文本类型
status_code 状态码,整型
mimetype MIME类型(仅包括内容类型部分)
set_cookie() 用来设置一个cookie
除了上面的方法和属性外,Response类同样拥有的Request类相同的get_json()方法、is_json()方法以及json属性。
set_cookie()方法支持多个参数来设置Cookie的选项
key cookie的键名(名称)
value cookie的值
max_age cookie被保存的时间数,单位为妙;默认在用户会话结束(即关闭浏览器)时过期
expires 具体的过期时间,一个datetime对象或UNIX时间戳
path 限制cookie只在给定的路径可用,默认为整个域名
domain 设置cookie可用的域名
secure 如果设置为True,只有通过HTTPS才可以使用
httponly 如果设置为True,禁止客户端JavaScript获取cookie
设置cookie
from flask import Flask, url_for, make_response
...
@app.route('/set/<name>')
def set_cookie(name):
response = make_response(redirect(url_for('hello')))
response.set_cookie('name', name)
return response
在Flask中,Cookie可以通过请求对象的cookies属性读取。在修改后的hello视图中,如果没有从查询参数中获取到name的值,就从Cookie中寻找
from flask import Flask, request
@app.route('/')
@app.route('/hello')
def hello():
name = request.args.get('name')
if name is None:
name = request.cookies.get('name', 'Human') # 从Cookie中获取name的值
return '<h1>Hello, %s</h1>' % name
0 Comments latest
No comments.