如果不设置cookie的过期时间,则默认关闭浏览器时cookie过期。flask设置过期时间,遵循下面的三条规则:
设置了cookie过期时间,即便浏览器都关闭了,只要没有cookie还在有效期内,再次打开浏览器,cookie依然有效。如果超过了cookie的过期时间,即便浏览器没有关闭,cookie也会失效。只要设置了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已经失效,能够记录我第一次来访问的信息已经不存在了。
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