Python:持久性cookie,生成`expires`字段

9 投票
4 回答
18664 浏览
提问于 2025-04-16 20:42

我正在尝试为一个简单的Python网页应用生成一个持久性cookie的文本。

我在生成expires字段时遇到了困难。这个字段的文本格式有点复杂,我不想自己写代码来生成它。

在Python中有没有什么可以帮助我的?我查看了cookiecookielib的文档,它们似乎处理了很多关于cookie的事情,但就是没有生成expires字段的内容。

4 个回答

0

Python中的time.strftime()函数可以根据RFC 6265的规定,格式化一个时间,用于设置cookie的expires(过期时间)。

import time
lease = 14 * 24 * 60 * 60  # 14 days in seconds
end = time.gmtime(time.time() + lease)
expires = time.strftime("%a, %d-%b-%Y %T GMT", end)
print(expires)

输出结果:

Tue, 23-Oct-2012 17:10:51 GMT

时间区域应该被忽略,但由于所有示例都包含“GMT”,所以保留它可能更安全。

这段内容基于Gareth Rees的回答

7

如果我没记错的话,当你使用 Cookie.SimpleCookie 时,你只需要在expires字段里指定一个以秒为单位的过期时间,比如:

from Cookie import SimpleCookie

c = SimpleCookie()
c['sid'] = 'xxx'
c['sid']['path'] = '/'
c['sid']['expires'] = 12 * 30 * 24 * 60 * 60 #  1 year

然后,使用 c.output() 的结果会像这样返回:

'Set-Cookie: sid=xxx; expires=Mon, 20 Jul 2015 14:42:35 GMT; Path=/'
18

我觉得你想做的事情大概是这样的:

import Cookie, datetime, uuid
ck = Cookie.SimpleCookie()

ck['session'] = str(uuid.uuid4())
ck['session']['domain'] = 'foo.com'
ck['session']['path'] = '/'
expires = datetime.datetime.utcnow() + datetime.timedelta(days=30) # expires in 30 days
ck['session']['expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")

>>> print ck.output()
Set-Cookie: session=9249169b-4c65-4daf-8e64-e46333aa5577; Domain=foo.com; expires=Mon, 01 Aug 2011 07:51:53 GMT; Path=/

撰写回答