我想在一個簡單的Python web應用程序中生成持久cookie的文本。Python:持久cookie,生成`expires`字段
我無法找到生成expires
字段的方法。該字段的文本格式有點複雜,我寧願不編寫代碼來自己生成它。
Python中是否有幫助?我已經在文檔的cookie
和cookielib
熟,他們似乎處理很多的餅乾業務,除了產生expires
場
我想在一個簡單的Python web應用程序中生成持久cookie的文本。Python:持久cookie,生成`expires`字段
我無法找到生成expires
字段的方法。該字段的文本格式有點複雜,我寧願不編寫代碼來自己生成它。
Python中是否有幫助?我已經在文檔的cookie
和cookielib
熟,他們似乎處理很多的餅乾業務,除了產生expires
場
我想你想要做這樣的事情:
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=/
Python的time.strftime()
可以格式化給定時間對cookie的expires
根據RFC 6265:
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' answer。
如果我是正確的,使用Cookie.SimpleCookie
時,你可以指定以秒爲TTL過期領域是這樣的:
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=/'
我正在擴大以前的評論和一半的答案,希望有用的答案。
這一個產生,據我所知一個最正確的和方便的cookie的日期格式在一個單一的快捷功能 - 通過任何被接受的,甚至是老奇,瀏覽器 - 接受絕對&相對時間:
import time
_weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
_monthname = [None,
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
def cookie_date(epoch_seconds=None, future=0):
if not epoch_seconds:
epoch_seconds = time.time()
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(epoch_seconds + future)
return "%s, %02d-%3s-%4d %02d:%02d:%02d GMT" % \
(_weekdayname[wd], day, _monthname[month], year, hh, mm, ss)
函數從Cookie._getdate()
/http.cookies._getdate()
發展而來,它產生空格而不是方便的-
(根據RFC確定,但沒有被所有瀏覽器識別)。該功能僅允許相對時間,並且是未公開的功能。但是它可以通過也未記錄的功能可以使用,你可以給整秒的SimpleCookie
的點點滴滴,然後相爲秒演繹成未來/過去的到期場(但不是飄!):
cookie_morsel['expires'] = +3600 # 1h into future; 3600.0 doesn't work!
經常使用的time.strftime("%a, %d %b %Y %T GMT", t_expires)
是有問題的,因爲它取決於語言環境設置(%a,%d)和特定操作系統特定的未記錄格式規範(%T在Windows上不能理解)。
您可以將'expires'字段設置爲未來/過去的秒數。浮動不起作用。參見'http.cookies._getdate()'/'Cookie._getdate()'。這似乎只是沒有記錄。 – kxr