我正在使用瓶子框架,我试图设置一个将在15分钟后过期的cookie,但它从未起作用,我发现问题在于我设置的过期时间。
我的问题是我无法让$violations = $this->get('validator')->validate($entity);
在当前时间增加15分钟。仅当我提供“days”关键字参数并将其设置为0以外的值时,它才有效。
即:
它以这种方式工作:
datetime.timedelta()
以下操作不起作用(cookie未创建也未更新):
expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(days=10, seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)
OR
expire_date = datetime.datetime.now()
expire_date = expire_date + datetime.timedelta(days=0, seconds=900)
response.set_cookie("MyCook", "CookieVal", expires=expire_date)
我阅读了文档,但目前还不清楚这是如何运作的。
有人可以帮我解决这个问题吗?提前谢谢。答案 0 :(得分:2)
你住在格林威治以西吗?
来自瓶子的set_cookie
函数需要UTC日期时间对象将它们转换为字符串,因此不考虑您的时区:
请参阅https://github.com/bottlepy/bottle/blob/master/bottle.py#L1729:
value = value.timetuple()
....
value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value)
换句话说,如果您在上午11:00设定到期日,那将是格林尼治标准时间上午11点。例如,哥斯达黎加凌晨3点。
在过期日期中添加一天或多天(甚至几小时)可以解决您的问题,因为expire_date
值会大于当前的GMT时间。
解决此问题的正确方法是使用当前的GMT时间而不是当地的当前时间:
expire_date = datetime.datetime.utcnow()