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?
  • Wie man sich mit Python auf eine Website anmeldet und mechanisiert
  • Immer mit dem Benutzer in den Django-Template-Kontext
  • Wie benutzt man Cookies und HTTP Basic Authentication in CherryPy?
  • Verwenden von Chroms Cookies in Python-Requests
  • Python - erhalten Cookie Ablauf Zeit mit der Anfragen Bibliothek
  • Python Requests - Verwalten von Cookies
  • Python Form POST mit urllib2 (auch Frage zum Speichern / Verwenden von 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.