Tôi đang mở rộng nhận xét trước và trả lời một nửa để hy vọng câu trả lời có thể sử dụng được.
một này tạo ra để kiến thức của tôi một định dạng chính xác và thuận tiện nhất ngày cookie trong một chức năng nhanh chóng duy nhất - chấp nhận bởi bất kỳ, thậm chí cũ và lẻ, trình duyệt - chấp nhận tuyệt đối & thời gian tương đối:
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)
Chức năng này được phát triển từ Cookie._getdate()
/http.cookies._getdate()
, tạo ra không gian thay vì thuận tiện -
's (ok theo RFC, nhưng không được nhận diện bởi tất cả trình duyệt). Hàm này chỉ cho phép thời gian tương đối và là một hàm không có giấy tờ. Tuy nhiên nó có thể được sử dụng bởi các tính năng cũng không có giấy tờ, mà bạn có thể cung cấp cho số nguyên giây cho hết hạn lĩnh vực trong SimpleCookie
mẩu, mà sau đó được giải thích tương đối như giây trong tương lai/quá khứ (nhưng không nổi!):
cookie_morsel['expires'] = +3600 # 1h into future; 3600.0 doesn't work!
Thường được sử dụng time.strftime("%a, %d %b %Y %T GMT", t_expires)
là có vấn đề, bởi vì nó phụ thuộc vào cài đặt miền địa phương (% a,% d) và đặc tả định dạng không có giấy tờ tùy thuộc vào hệ điều hành (% T không hiểu trên Windows ví dụ).
Bạn chỉ có thể đặt trường 'hết hạn' là số nguyên giây trong tương lai/quá khứ. Float không hoạt động. Xem 'http.cookies._getdate()'/'Cookie._getdate()'. Có vẻ như không có tài liệu. – kxr