Flask处理Cookies|Flask如何读取和设置写入Cookies

文章目录

Flask Cookies 的读写方法

在 Web 开发中,Cookies 是一种在客户端保持状态的简单方式。Flask 作为一个轻量级的 Python web 框架,处理 Cookies 是一项基本的任务,它提供了操作 Cookies 的便捷方法,可以让我们在用户的浏览器和服务器之间保持状态信息。本文将介绍如何在 Flask 中读取和写入 Cookies,并提供示例代码。

在 Flask 中读取 Cookies

在 Flask 中,可以通过 request 对象的 cookies 属性来访问客户端发送的所有 Cookies。这是一个字典,包含了所有的 cookie 名称和值。例如,如果我们想获取名为username的 cookie:

from flask import request

@app.route('/')
def index():
    username = request.cookies.get('username')
    return f'Hello, {username}'

在这个例子中,我们使用了cookies.get()方法来安全地获取 cookie 的值,如果 cookie 不存在,它将返回None

在 Flask 中设置 Cookies

在 Flask 中设置 cookie 相对简单。可以使用 make_response 函数创建响应对象,并调用该对象的 set_cookie 方法。以下是一个示例,展示了如何在用户登录后设置一个 cookie:

from flask import make_response

@app.route('/login', methods=['POST'])
def login():
    # 这里省略了验证用户登录的代码
    resp = make_response('登录成功')
    resp.set_cookie('username', 'axiaoxin')
    return resp

在这个例子中,我们首先创建了一个响应对象resp,然后使用set_cookie方法设置了一个名为username的 cookie,值为axiaoxin

Flask 设置 Cookies 过期时间等选项

Flask 允许你设置多个与 Cookies 相关的选项,例如过期时间、路径、域等。

from datetime import datetime, timedelta

@app.route('/')
def index():
    resp = make_response('Cookie set with options!')
    expire_date = datetime.now() + timedelta(days=90)  # 设置过期时间为90天后
    resp.set_cookie('username', 'axiaoxin', expires=expire_date, path='/')
    return resp

在处理 Cookies 时,安全性是非常重要的。为了防止跨站脚本攻击(XSS),我们应该确保 cookie 的值是安全的。此外,如果 cookie 包含敏感信息,如会话令牌,我们应该考虑使用安全 cookie。这可以通过设置securehttponly标志来实现:

resp.set_cookie('username', 'axiaoxin', secure=True, httponly=True)

在这个例子中,secure=True确保 cookie 只能通过 HTTPS 传输,而httponly=True防止 JavaScript 访问 cookie,增加了安全性。

set_cookie方法完整签名:

set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)

参数解析:

  • key (str): 这是 cookie 的名称,也是识别 cookie 的关键。
  • value (str): cookie 所存储的数据值。
  • max_age (timedelta | int | None): 定义 cookie 的最大存活时间(秒)。如果设置为 None,默认 cookie 会在浏览器会话结束时失效。
  • expires (str | datetime | int | float | None): 指定 cookie 的过期时间。可以是 datetime 对象或 UNIX 时间戳。
  • path (str | None): 限制 cookie 只能在指定路径下有效。默认情况下,cookie 适用于整个域。
  • domain (str | None): 设置跨域 cookie 时使用。例如,domain=“example.com” 可以让www.example.com, foo.example.com 等子域都能读取这个 cookie。
  • secure (bool): 当设置为 True 时,cookie 仅通过 HTTPS 传输。
  • httponly (bool): 如果设置为 True,将禁止 JavaScript 访问此 cookie。
  • samesite (str | None): 限制 cookie 附加到同站请求上。

值得注意的是,如果我们设置的 cookie 头大小超过了最大限制(max_cookie_size),系统会发出警告。但即便如此,cookie 仍然会被设置。

Flask 删除 Cookies

如果需要删除已经设置的 Cookie,可以使用相同的 set_cookie 方法,并将过期时间设置为过去的某个时间点。

@app.route('/logout')
def logout():
    resp = make_response('Logged out!')
    resp.set_cookie('username', '', expires=0)
    return resp

结语

以上就是在 Flask 中读写 Cookies 的基本方法。通过这些简单的操作,你可以在自己的 Web 应用中有效地管理客户端状态。

Flask 提供了一套简单的 API 来处理 Cookies,使得在 Web 应用中管理用户状态变得容易。记得在处理 Cookies 时总是考虑安全性,以保护你的用户和应用不受攻击。


也可以看看


全国大流量卡免费领

19元月租ㆍ超值优惠ㆍ长期套餐ㆍ免费包邮ㆍ官方正品