flask 设置cookie过期时间

如果不设置cookie的过期时间,则默认关闭浏览器时cookie过期。flask设置过期时间,遵循下面的三条规则:

  1. max_age: 规定多少秒以后过期
  2. expires:datatime类型,使用此参数,需参照格林尼治时间,即北京时间-8个小时
  3. 如果max_age和expires都设置,则以max_age为主

设置了cookie过期时间,即便浏览器都关闭了,只要没有cookie还在有效期内,再次打开浏览器,cookie依然有效。如果超过了cookie的过期时间,即便浏览器没有关闭,cookie也会失效。只要设置了cookie的过期时间,是否失效就已经和浏览器是否关闭无关。

1. 通过max_age设置cookie有效期

from flask import Flask, make_response, request
from datetime import datetime

app = Flask(__name__)

@app.route("/")
def index():
    # 尝试获取 first_access cookie
    first_access = request.cookies.get('first_access')
    if first_access is None:        # 没有first_access cookie, 是第一次来
        first_access = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        res = make_response('hello world')
        res.set_cookie('first_access', first_access, max_age=60)        # 在响应头里设置cookie
        return res
    else:       # 不是第一次来
        return f"你第一次访问这个网页的时间是: {first_access}"


if __name__ == '__main__':
    app.run()

我设置了cookie的过期时间是60秒,那么一分钟以后,再次访问时,页面里显示的内容就是hello world, 服务以为我是第一次来,原因是cookie已经失效,能够记录我第一次来访问的信息已经不存在了。

2. 通过expires 设置过期时间

from flask import Flask, make_response, request
from datetime import datetime

app = Flask(__name__)

@app.route("/")
def index():
    # 尝试获取 first_access cookie
    first_access = request.cookies.get('first_access')
    if first_access is None:        # 没有first_access cookie, 是第一次来
        first_access = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        res = make_response('hello world')
        expires_time = datetime(year=2021, month=9, day=7, hour=18)
        res.set_cookie('first_access', first_access, expires=expires_time)        # 在响应头里设置cookie
        return res
    else:       # 不是第一次来
        return f"你第一次访问这个网页的时间是: {first_access}"


if __name__ == '__main__':
    app.run()

我设置cookie的过期时间是9月7日的18点,但通过浏览器查看cookie信息,显示过期时间是9月8日的凌晨2点,相差了8个小时,这是因为浏览器里会主动加8个小时,想要和我们的北京时间保持一致,在设置的时候就要减去8个小时。

expires_time = datetime(year=2021, month=9, day=7, hour=10)

现在的cookie过期时间是9月7日下午18点。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案