为什么不是我在Django中设置的cookie并使用我的过期时间阅读jQuery的cookie插件?

时间:2011-11-11 19:24:58

标签: jquery python django cookies

我正在尝试创建一个具有特定过期时间的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。

更新2

我也尝试过期而且只设置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。我真的很困惑,在这里。

3 个答案:

答案 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相关的所有事情。我认为它可能与我正在使用的自定义中间件有关,但我无法证实这一点。