Setzen Sie mehrere Cookies mit dem gleichen Namen in Django

Gibt es eine Möglichkeit, Cookies mit dem gleichen Namen für mehrere Domains oder Pfade in der gleichen Antwort zu setzen? Das folgende setzt nur das zweite Cookie ein:

response.set_cookie("alice", "123", domain='sub.example.com') response.set_cookie("alice", "456", domain='example.com') 

Ich sah die Django-Implementierung an . Es verwendet ein Wörterbuch zum Speichern von Cookies:

 self.cookies[key] = value 

So kann Django nicht mehrere Cookies mit dem gleichen Namen in der gleichen Antwort setzen.

Soll das so funktionieren? Siehst du einen Weg, um diese Beschränkung zu umgehen?

Aktualisieren

Wird als Fehler gemeldet: https://code.djangoproject.com/ticket/18908

  • Import Python-Modul fehlschlägt (http.cookies)
  • Warum funktioniert das Session-Cookie beim Servieren von einer Domain, aber nicht bei der Verwendung einer IP?
  • Wie kann ich alle Cookies mit Selen RC speichern und wiederherstellen?
  • Django csrf in ajax POST (csrf cookie nicht gesetzt bis {{csrf}} verwendet)
  • Roboter-Framework-Pass-Cookie, um Anfrage zu erhalten (RequestsLibrary) - TypeError
  • Httplib2, wie man mehr als ein Cookie setzt?
  • Setzen Sie ein "Cookie" in ein `CookieJar`
  • Entschlüsseln von Chrom-Cookies
  • 2 Solutions collect form web for “Setzen Sie mehrere Cookies mit dem gleichen Namen in Django”

    Das kann nicht genau auf die Frage antworten, aber immer noch.

    Dies scheint Problem mit der Django-Implementierung, da es nur mit Cookie-Namen als Schlüssel in dict. In der realen Welt kann man Cookies mit gleichem Namen mit mehreren Werten haben, sofern entweder Domain oder Pfad unterschiedlich ist. Ich fand diese nützlichen HTTP-Cookies erklärt

    Mehr Referenz:

    RFC2965

    Http-Plätzchen

    Es ist ein einfaches Dict, um das Cookie zu speichern, aber beim Rendering der Cookies auf die Antwort headers django einfach cookies.values() es sieht nicht auf die Tasten.

    Zu diesem Zweck kannst du Lust bekommen (das ist Python 3.5):

     # python 3.5 specific unpacking # Note that according to the RFC, cookies ignore the ports hostname, *_ = request.get_host().split(':') # set the cookie to delete response.delete_cookie(settings.ACCESS_TOKEN_COOKIE_KEY, domain=settings.COOKIE_DOMAIN) # pull it out of the cookie storage # and delete it so we can write an new one cookie_domain_cookie = response.cookies[settings.ACCESS_TOKEN_COOKIE_KEY] del response.cookies[settings.ACCESS_TOKEN_COOKIE_KEY] # write the new cookie response.delete_cookie(settings.ACCESS_TOKEN_COOKIE_KEY, domain=hostname) # do the same as we did above, probably not strictly necessary hostname_cookie = response.cookies[settings.ACCESS_TOKEN_COOKIE_KEY] del response.cookies[settings.ACCESS_TOKEN_COOKIE_KEY] # make new keys for the cookies cookie_domain_cookie_key = "{}:{}".format(settings.ACCESS_TOKEN_COOKIE_KEY, settings.COOKIE_DOMAIN) hostname_cookie_key = "{}:{}".format(settings.ACCESS_TOKEN_COOKIE_KEY, hostname) # set them response.cookies[cookie_domain_cookie_key] = cookie_domain_cookie response.cookies[hostname_cookie_key] = hostname_cookie 
    Python ist die beste Programmiersprache der Welt.