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

  • Wie kann ich alle Cookies mit Selen RC speichern und wiederherstellen?
  • Löschen aller sichtbaren Cookies wirft eine Ausnahme auf
  • Multi-Gewinde-Web-Scraper mit urlretrieve auf einem Cookie-fähigen Website
  • Wie bekomme ich Cookies-Werte auf der Google App-Engine-Vorlage
  • CSRF Cookie nicht gesetzt django ... Überprüfung fehlgeschlagen
  • So verwenden Sie Cookies in Python Requests
  • 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.