我正在尝试创建一个具有特定过期时间的Cookie。我使用以下代码在django视图中设置它:
from datetime import datetime
response.set_cookie('cookie_name', 'cookie_value', expires=datetime.today() + timedelta(20*365), path='/path/to/cookie/')
我正在使用带有以下代码的jQuery Cookie插件读取cookie的值:
if ($.cookie("cookie_name") == "True") {
$.cookie("cookie_name", "False");
}
else {
$.cookie("cookie_name", "True");
}
我的主要问题是cookie被视为会话cookie(因为它显示在Cookie选项卡的资源选项卡中的Chromium开发人员cookie列表中。为什么我的cookie没有被看到或被重置的过期时间?我可以验证cookie是会话cookie,因为如果我关闭浏览器并重新打开,则cookie不在那里。
根据this post中的答案,我将Cookie django代码更改为以下代码:
from datetime import datetime
max_age = 20*365*24*60*60 #twenty years
expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
response.set_cookie(key='cookie_name', value='cookie_value', max_age=max_age, expires=expires, path='/path/to/cookie/')
根据Chromium,我的cookie仍然是会话cookie。
我也尝试过期而且只设置max_age,我仍然遇到同样的问题。
max_age = 20*365*24*60*60 #twenty years
expires = datetime.utcnow() + timedelta(seconds=max_age)
response.set_cookie(key='advisees', value=limit_to_advisees, expires=expires, path='/path/to/cookie/')
如果没有提供,Django应该计算max_age。我真的很困惑,在这里。
答案 0 :(得分:0)
同样设置max_age。如果不是,则会话完成后浏览器将丢弃cookie。或者更好的是,只需指定max_age,而不是过期,并且将为您计算到期日期。
经过进一步调查,您正在使用日期对象,到期需要一个日期时间对象。所以你要做datetime.datetime.now()而不是datetime.date.today()
答案 1 :(得分:0)
使用Update 2作为基础我似乎无法复制问题。
您使用的是什么版本的Django? 1.3和1.3.1都正确地为我设置了cookie。
您是否也在其他浏览器上测试过它?看起来这里有一些更普遍的东西。
答案 2 :(得分:0)
我能够通过将Django排除在等式之外来解决这个问题,并通过jQuery Cookie完成与cookie相关的所有事情。我认为它可能与我正在使用的自定义中间件有关,但我无法证实这一点。