Cookies

你可以通过 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 方法就是得到一个响应对象。

总结

  1. request.cookies.get('key') 推荐使用get方式,避免cookie不存在时报错
  2. 设置cookie必须拿到响应对象make_response() 将渲染模板结果封装为响应对象,之后才能调用 set_cookie()
  3. 官方提示:需要状态保持优先使用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的的一些属性

  1. 'username' → key(Cookie 名称) Cookie 的键名,前端、后端通过这个名字读取这条 Cookie。 对应读取代码:request.cookies.get("username")
  2. 'Tom' → value(Cookie 值) 这条 Cookie 存储的数据。 注意:Cookie 存放在浏览器,不要直接存放密码、隐私明文
  3. max_age=3600 Cookie 有效时长,单位:3600 = 1 小时。
  • max_age=None:会话 Cookie,浏览器关闭后 Cookie 立刻失效;
  • max_age=0:立刻删除 Cookie。

要删除cookie 对要删除的cookie的key 再此设置一遍就可以,max_age=0:立刻删除 Cookie

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注