flask 设置cookie过期时间
如果不设置cookie的过期时间,则默认关闭浏览器时cookie过期。
flask设置过期时间,遵循下面的三条规则:
- max_age: 规定多少秒以后过期
- expires:datatime类型,使用此参数,需参照格林尼治时间,即北京时间-8个小时
- 如果max_age和expires都设置,则以max_age为主
设置了cookie过期时间,即便浏览器都关闭了,只要没有cookie还在有效期内,再次打开浏览器,cookie依然有效。
如果超过了cookie的过期时间,即便浏览器没有关闭,cookie也会失效。
只要设置了cookie的过期时间,是否失效就已经和浏览器是否关闭无关。
1. 通过max_age设置cookie有效期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from flask import Flask, make_response, request from datetime import datetime
app = Flask(__name__)
@app.route("/") def index(): first_access = request.cookies.get('first_access') if first_access is None: 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) return res else: return f"你第一次访问这个网页的时间是: {first_access}"
if __name__ == '__main__': app.run()
|
设置了cookie的过期时间是60秒,那么一分钟以后,再次访问时,页面里显示的内容就是hello world, 服务以为我是第一次来,原因是cookie已经失效,能够记录我第一次来访问的信息已经不存在了。
2. 通过expires 设置过期时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| from flask import Flask, make_response, request from datetime import datetime
app = Flask(__name__)
@app.route("/") def index(): first_access = request.cookies.get('first_access') if first_access is None: 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) return res else: return f"你第一次访问这个网页的时间是: {first_access}"
if __name__ == '__main__': app.run()
|
我设置cookie的过期时间是9月7日的18点,但通过浏览器查看cookie信息,显示过期时间是9月8日的凌晨2点,相差了8个小时,这是因为浏览器里会主动加8个小时,想要和我们的北京时间保持一致,在设置的时候就要减去8个小时。
1
| expires_time = datetime(year=2021, month=9, day=7, hour=10)
|
现在的cookie过期时间是9月7日下午18点。