Flask浏览器应用中如何设置Cookie自定义过期时间?
你的代码问题出在max_age和expires参数的使用格式错误,导致浏览器将Cookie识别为会话级(Session),以下是问题分析和修正方案:
问题原因
max_age参数类型错误:该参数需要传入整数秒数,而非datetime对象,你传入的expire_date是时间对象,Flask无法解析,直接忽略了这个参数。expires参数时区错误:该参数要求传入UTC时间,而datetime.datetime.now()获取的是本地时间,浏览器无法正确解析这个时间,最终将Cookie设为会话有效期。- 同时设置两个参数可能冲突:当两个参数格式都不符合要求时,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
相关产品推荐
相关产品推荐

