You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask浏览器应用中如何设置Cookie自定义过期时间?

Flask设置3天有效期Cookie的正确方法

你的代码问题出在max_age和expires参数的使用格式错误,导致浏览器将Cookie识别为会话级(Session),以下是问题分析和修正方案:

问题原因

  1. max_age参数类型错误:该参数需要传入整数秒数,而非datetime对象,你传入的expire_date是时间对象,Flask无法解析,直接忽略了这个参数。
  2. expires参数时区错误:该参数要求传入UTC时间,而datetime.datetime.now()获取的是本地时间,浏览器无法正确解析这个时间,最终将Cookie设为会话有效期。
  3. 同时设置两个参数可能冲突:当两个参数格式都不符合要求时,Flask或浏览器会默认使用会话级Cookie。

修正方案

方案1:使用max_age(推荐,无需处理时区)

直接计算3天对应的秒数(3×24×60×60=259200秒),传入max_age参数:

from datetime import timedelta
from flask import make_response, render_template

@app.route('/start')
def setcookie():
    resp = make_response(render_template('start.html'))
    # 设置3天有效期的Cookie
    resp.set_cookie('mycookie', id_generator(6), max_age=259200)
    return resp

方案2:使用expires(需传入UTC时间)

改用datetime.utcnow()获取UTC时间,再加上3天的时间差:

from datetime import datetime, timedelta
from flask import make_response, render_template

@app.route('/start')
def setcookie():
    expire_date = datetime.utcnow() + timedelta(days=3)
    resp = make_response(render_template('start.html'))
    resp.set_cookie('mycookie', id_generator(6), expires=expire_date)
    return resp

额外注意事项

  • 确保id_generator(6)返回的是字符串类型,Cookie值必须为字符串。
  • 不要同时设置max_age和expires,避免参数冲突,选其中一种方式即可。

内容的提问来源于stack exchange,提问作者mattc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:43:18