http.cookies — HTTP State Management¶
Quellcode: Lib/http/cookies.py
Das Modul http.cookies definiert Klassen zur Abstraktion des Konzepts von Cookies, einem Mechanismus zur Verwaltung des HTTP-Status. Es unterstützt sowohl einfache Cookies, die nur aus Strings bestehen, als auch eine Abstraktion für beliebige serialisierbare Datentypen als Cookie-Wert.
Das Modul wendete früher strikt die Parsing-Regeln an, die in den RFC 2109 und RFC 2068 Spezifikationen beschrieben sind. Es wurde inzwischen entdeckt, dass MSIE 3.0x die in diesen Spezifikationen genannten Zeichenregeln nicht befolgte; viele aktuelle Browser und Server haben die Parsing-Regeln im Umgang mit Cookies ebenfalls gelockert. Infolgedessen verwendet dieses Modul jetzt Parsing-Regeln, die etwas weniger streng sind als früher.
Der Zeichensatz, string.ascii_letters, string.digits und !#$%&'*+-.^_`|~: bezeichnen die Menge der gültigen Zeichen, die dieses Modul in einem Cookie-Namen (als key) zulässt.
Geändert in Version 3.3: ‘:’ als gültiges Cookie-Namenszeichen zugelassen.
Hinweis
Beim Auftreten eines ungültigen Cookies wird CookieError ausgelöst. Wenn Ihre Cookie-Daten von einem Browser stammen, sollten Sie daher immer auf ungültige Daten vorbereitet sein und CookieError beim Parsen abfangen.
- Ausnahme http.cookies.CookieError¶
Ausnahme, die aufgrund von RFC 2109-Ungültigkeit fehlschlägt: falsche Attribute, falscher Set-Cookie Header usw.
- Klasse http.cookies.BaseCookie([input])¶
Diese Klasse ist ein wörterbuchähnliches Objekt, dessen Schlüssel Strings und dessen Werte
Morsel-Instanzen sind. Beachten Sie, dass beim Zuweisen eines Schlüssels zu einem Wert dieser zuerst in einMorselkonvertiert wird, das den Schlüssel und den Wert enthält.Wenn input angegeben ist, wird es an die Methode
load()übergeben.
- Klasse http.cookies.SimpleCookie([input])¶
Diese Klasse leitet sich von
BaseCookieab und überschreibtvalue_decode()undvalue_encode().SimpleCookieunterstützt Strings als Cookie-Werte. Beim Setzen des Wertes ruftSimpleCookiedie eingebaute Funktionstr()auf, um den Wert in einen String zu konvertieren. Von HTTP empfangene Werte werden als Strings beibehalten.
Siehe auch
- Modul
http.cookiejar HTTP-Cookie-Handling für Web-Clients. Die Module
http.cookiejarundhttp.cookieshängen nicht voneinander ab.- RFC 2109 - HTTP State Management Mechanism
Dies ist die Zustandsverwaltungspezifikation, die von diesem Modul implementiert wird.
Cookie-Objekte¶
- BaseCookie.value_decode(val)¶
Gibt ein Tupel
(echter_wert, kodierter_wert)aus einer String-Darstellung zurück.echter_wertkann jeden Typ haben. Diese Methode führt inBaseCookiekeine Dekodierung durch – sie existiert, damit sie überschrieben werden kann.
- BaseCookie.value_encode(val)¶
Gibt ein Tupel
(echter_wert, kodierter_wert)zurück. val kann jeden Typ haben, aberkodierter_wertwird immer in einen String konvertiert. Diese Methode führt inBaseCookiekeine Kodierung durch – sie existiert, damit sie überschrieben werden kann.Im Allgemeinen sollten
value_encode()undvalue_decode()Umkehrfunktionen für den Wertebereich von value_decode sein.
- BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')¶
Gibt eine String-Darstellung zurück, die für das Senden als HTTP-Header geeignet ist. attrs und header werden an die
output()-Methode jedesMorselübergeben. sep wird zum Verbinden der Header verwendet und ist standardmäßig die Kombination'\r\n'(CRLF).
Morsel-Objekte¶
- Klasse http.cookies.Morsel¶
Abstrahiert ein Schlüssel/Wert-Paar, das einige RFC 2109-Attribute hat.
Morsels sind wörterbuchähnliche Objekte, deren Schlüsselmenge konstant ist – die gültigen RFC 2109-Attribute, die sind
Das Attribut
httponlygibt an, dass das Cookie nur in HTTP-Anfragen übertragen wird und nicht über JavaScript zugänglich ist. Dies soll einige Formen von Cross-Site Scripting abmildern.Das Attribut
samesitesteuert, wann der Browser das Cookie bei Cross-Site-Anfragen sendet. Dies hilft bei der Abmilderung von CSRF-Angriffen. Gültige Werte sind „Strict“ (nur bei Same-Site-Anfragen gesendet), „Lax“ (bei Same-Site-Anfragen und Top-Level-Navigationen gesendet) und „None“ (bei Same-Site- und Cross-Site-Anfragen gesendet). Bei Verwendung von „None“ muss auch das Attribut „secure“ gesetzt sein, wie es von modernen Browsern gefordert wird.Das Attribut
partitionedzeigt den User Agents an, dass diese Cross-Site-Cookies nur im selben Top-Level-Kontext verfügbar sein *sollen*, in dem das Cookie ursprünglich gesetzt wurde. Damit dies vom User Agent akzeptiert wird, **müssen** Sie auchSecuresetzen.Zusätzlich wird empfohlen, das Präfix
__Hostzu verwenden, wenn partitionierte Cookies gesetzt werden, um sie an den Hostnamen und nicht an die registrierbare Domain zu binden. Lesen Sie CHIPS (Cookies Having Independent Partitioned State) für vollständige Details und Beispiele.Die Schlüssel sind nicht case-sensitiv und ihr Standardwert ist
''.Geändert in Version 3.7: Attribute
key,valueundcoded_valuesind schreibgeschützt. Verwenden Sieset(), um sie zu setzen.Geändert in Version 3.8: Unterstützung für das Attribut
samesitehinzugefügt.Geändert in Version 3.14: Unterstützung für das Attribut
partitionedhinzugefügt.
- Morsel.value¶
Der Wert des Cookies.
- Morsel.coded_value¶
Der kodierte Wert des Cookies – dies ist, was gesendet werden sollte.
- Morsel.key¶
Der Name des Cookies.
- Morsel.set(key, value, coded_value)¶
Setzt die Attribute key, value und coded_value.
- Morsel.output(attrs=None, header='Set-Cookie:')¶
Gibt eine String-Darstellung des Morsels zurück, die zum Senden als HTTP-Header geeignet ist. Standardmäßig sind alle Attribute enthalten, es sei denn, attrs wird angegeben, in diesem Fall sollte es eine Liste von zu verwendenden Attributen sein. header ist standardmäßig
"Set-Cookie:".
- Morsel.js_output(attrs=None)¶
Gibt einen einbettbaren JavaScript-Snippet zurück, der, wenn er in einem Browser ausgeführt wird, der JavaScript unterstützt, dasselbe bewirkt, als ob der HTTP-Header gesendet worden wäre.
Die Bedeutung von attrs ist dieselbe wie in
output().
- Morsel.OutputString(attrs=None)¶
Gibt einen String zurück, der den Morsel darstellt, ohne umgebende HTTP- oder JavaScript-Elemente.
Die Bedeutung von attrs ist dieselbe wie in
output().
- Morsel.update(values)¶
Aktualisiert die Werte im Morsel-Wörterbuch mit den Werten aus dem Wörterbuch values. Löst einen Fehler aus, wenn einer der Schlüssel im values-Wörterbuch kein gültiges RFC 2109-Attribut ist.
Geändert in Version 3.5: ein Fehler wird für ungültige Schlüssel ausgelöst.
- Morsel.copy(value)¶
Gibt eine flache Kopie des Morsel-Objekts zurück.
Geändert in Version 3.5: gibt ein Morsel-Objekt anstelle eines Wörterbuchs zurück.
- Morsel.setdefault(key, value=None)¶
Löst einen Fehler aus, wenn key kein gültiges RFC 2109-Attribut ist, andernfalls verhält es sich wie
dict.setdefault().
Beispiel¶
Das folgende Beispiel zeigt die Verwendung des Moduls http.cookies.
>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # generate HTTP headers
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # same thing
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> C = cookies.SimpleCookie()
>>> C["rocky"] = "road"
>>> C["rocky"]["path"] = "/cookie"
>>> print(C.output(header="Cookie:"))
Cookie: rocky=road; Path=/cookie
>>> print(C.output(attrs=[], header="Cookie:"))
Cookie: rocky=road
>>> C = cookies.SimpleCookie()
>>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)
>>> print(C)
Set-Cookie: chips=ahoy
Set-Cookie: vienna=finger
>>> C = cookies.SimpleCookie()
>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
>>> print(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"
>>> C = cookies.SimpleCookie()
>>> C["oreo"] = "doublestuff"
>>> C["oreo"]["path"] = "/"
>>> print(C)
Set-Cookie: oreo=doublestuff; Path=/
>>> C = cookies.SimpleCookie()
>>> C["twix"] = "none for you"
>>> C["twix"].value
'none for you'
>>> C = cookies.SimpleCookie()
>>> C["number"] = 7 # equivalent to C["number"] = str(7)
>>> C["string"] = "seven"
>>> C["number"].value
'7'
>>> C["string"].value
'seven'
>>> print(C)
Set-Cookie: number=7
Set-Cookie: string=seven