Rozszerzam poprzedni komentarz i połowę odpowiedzi, mam nadzieję, że nadaję się do użytku.
Ten produkuje mojej wiedzy najbardziej poprawne i wygodny format daty cookies w jednym szybkim funkcji - przyjęta przez dowolny, nawet stare i dziwne, przeglądarek - akceptuje absolutną & czas względna:
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)
Funkcja ewoluowała z Cookie._getdate()
/http.cookies._getdate()
, która tworzy przestrzenie zamiast wygodnych -
(zgodnie z RFC, ale nie jest rozpoznawana przez wszystkie przeglądarki). Ta funkcja pozwala tylko na względny czas i jest funkcją nieudokumentowaną. Jednak może on być stosowany przez również nieudokumentowanych funkcji, które można dać całkowite sekund upływa pole w SimpleCookie
kąski, które są następnie interpretowane względem jako sekund w przyszłości/przeszłości (ale nie pływać!):
cookie_morsel['expires'] = +3600 # 1h into future; 3600.0 doesn't work!
Często używany time.strftime("%a, %d %b %Y %T GMT", t_expires)
jest wątpliwy, ponieważ zależy od ustawień regionalnych (% a,% d) i specyfikacji nieudokumentowanego formatu specyficznego dla systemu operacyjnego (% T nie jest zrozumiałe na przykład w Windowsie).
Możesz po prostu ustawić pola 'expires' jako liczbę całkowitą sekund w przyszłość/przeszłość. Float nie działa. Zobacz 'http.cookies._getdate()'/'Cookie._getdate()'. Wydaje się po prostu nie udokumentowane. – kxr