你可以通过 cookies 属性来访问 Cookies,用响应对象的 set_cookie 方法来设置 Cookies。
请求对象的 cookies 属性是一个内容为客户端提交的所有 Cookies 的字典。如果你想使用会话,请不要直接使用 Cookies,请参考 会话一节。在 Flask 中,已经注意处理了一些 Cookies 安全细节。
读取 cookies
如下例子是获取key为username的cookie
from flask import request
@app.route('/')
def index():
username = request.cookies.get('username')Code language: JavaScript (javascript)
存储 cookies
from flask import make_response
@app.route('/')
def index():
resp = make_response(render_template("index.html"))
resp.set_cookie('username', 'Tom')
return respCode language: JavaScript (javascript)
render_template方法就是得到一个响应对象。
总结
request.cookies.get('key')推荐使用get方式,避免cookie不存在时报错- 设置cookie必须拿到响应对象,
make_response()将渲染模板结果封装为响应对象,之后才能调用set_cookie() - 官方提示:需要状态保持优先使用Flask会话(session),而非直接操作原始Cookie
删除Cookie写法
通过设置过期时间实现删除:
resp.set_cookie("username", "", max_age=0)Code language: JavaScript (javascript)
完整例子
from flask import Flask, request, make_response, render_template
app = Flask(__name__)
# 写入Cookie
@app.route('/set')
def set_cookie():
resp = make_response("Cookie 设置成功!")
resp.set_cookie('username', 'Tom', max_age=3600, httponly=True)
return resp
# 读取Cookie
@app.route('/get')
def get_cookie():
username = request.cookies.get("username")
return f"获取到cookie:{username}"
# 删除Cookie
@app.route('/del')
def del_cookie():
resp = make_response("Cookie已删除")
resp.set_cookie("username", "", max_age=0)
return resp
if __name__ == '__main__':
app.run(debug=True)Code language: PHP (php)
上面例子设置了cookie的的一些属性
'username'→ key(Cookie 名称) Cookie 的键名,前端、后端通过这个名字读取这条 Cookie。 对应读取代码:request.cookies.get("username")'Tom'→ value(Cookie 值) 这条 Cookie 存储的数据。 注意:Cookie 存放在浏览器,不要直接存放密码、隐私明文。max_age=3600Cookie 有效时长,单位:秒3600= 1 小时。
max_age=None:会话 Cookie,浏览器关闭后 Cookie 立刻失效;max_age=0:立刻删除 Cookie。
要删除cookie 对要删除的cookie的key 再此设置一遍就可以,max_age=0:立刻删除 Cookie