Python Bottle 持久性 Cookie 不起作用

3 投票
1 回答
2122 浏览
提问于 2025-04-17 05:05

我正在做一个网站,想在一个cookie里存储一个值。

这个值是一个数字,当用户访问网站时,我想知道他们上次访问时这个数字是什么。所以我在想,能不能用一个持久的cookie来存储当前的值。当用户来到网站时,如果没有会话cookie,那么会话cookie就会从持久cookie中复制一份。这样一来,会话cookie就总是能拿到上次访问时的值。

不过,我发现我的持久cookie没有被保存,尽管我已经设置了过期日期为一年后。

这是我的Python代码:

persistentCookieKey = category + '_highest_id'
sessionCookieKey = 'session_' + persistentCookieKey + '_highest_id'

persistentCookieValue = request.get_cookie(persistentCookieKey)
if persistentCookieValue == None:
    persistentCookieValue = 0      # each time i restart my browser it comes through here!

sessionCookieValue = request.get_cookie(sessionCookieKey)
print 'persistentCookieValue:', persistentCookieValue
print 'sessionCookieValue:', sessionCookieValue

if sessionCookieValue == None:
    print 'session cookie not set, setting to:', persistentCookieValue
    sessionCookieValue = persistentCookieValue
    response.set_cookie(sessionCookieKey, str(persistentCookieValue))

print 'setting persistent cookie to value:', highestId
expireDate = date.today() + timedelta(days=365)
response.set_cookie(persistentCookieKey, str(highestId), expires=expireDate)

highestIdLastVisit = int(sessionCookieValue) 

1 个回答

9

Bottle这个框架使用了http://docs.python.org/library/cookie.html来支持cookie功能。这个功能要求expires参数必须是一个特定格式的字符串,格式是Wdy, DD-Mon-YY HH:MM:SS GMT。如果你传入的是日期时间对象,程序不会报错,但也不会正常工作。

我会在未来的Bottle版本中修复这个问题(你好,我是作者),但目前我建议你使用max_age来代替。

补充:哦,我刚发现文档中也写错了。对此我很抱歉。 补充2:已经在主版本中修复了。

撰写回答