[PYTHON] Same-Site-Attributeinstellung des Cookies in Django

Hintergrund

Wenn ich ab dem 17. Februar 2020 lebte, ohne zu wissen, dass der Standardwert des Attributs "Gleiche Site" in Chrome 80 von "Keine" in "Lax" geändert wird, war ich ungeduldig mit einem Problem auf der Operationssite. Als ich nach einer Möglichkeit suchte, das Same-Site-Attribut für Cookies in Django festzulegen, gab es einen Unterschied in den Einstellungen zwischen Django 2 und 3, daher möchte ich es als Memo behalten.

Für Django2

Bei Verwendung eines Pakets

Der einfache Weg ist, das Paket zu verwenden. Ich verwende immer noch Django2 und das Paket "django-cookies-samesite" schien nützlich zu sein, daher habe ich beschlossen, es zum Festlegen des Same-Site-Attributs zu verwenden. https://pypi.org/project/django-cookies-samesite/

Es ist einfach einzurichten, fügen Sie es einfach zu MIDDLEWARE_CLASSES hinzu und definieren Sie die Variablen in der Einstellungsdatei.

MIDDLEWARE_CLASSES = (
    'django_cookies_samesite.middleware.CookiesSameSite',
    ...
)
SESSION_COOKIE_SAMESITE = 'None'

Dies ist auch praktisch, da der Cookie-Name optional festgelegt und die gleiche Site aller Cookies zwangsweise neu geschrieben werden kann.

Fügen Sie Ihre eigene Website hinzu

Wenn Sie es selbst hinzufügen, sieht es so aus. Dies ist ebenfalls einfach, kann jedoch etwas ärgerlich sein, wenn Sie an verschiedenen Stellen Cookies setzen.

response = HttpResponse('OK')
response.cookies[key]['samesite'] = 'None'

Für Django 3

In Django3 wurde das vorhandene set_cookie verbessert, sodass Sie eine gleiche Site übergeben können. Das ist viel sauberer.

response = HttpResponse('OK')
response.set_cookie(key, value, secure=True, samesite='None')

Im Gegensatz zu Django2 handelt es sich jedoch nicht um einen Prozess in Middleware. Daher kann es problematisch sein, dass Sie ihn einzeln festlegen müssen.

das Ende

Ich habe nicht die Angewohnheit, Chrom so oft zu schließen, daher war es schwierig, dieses Problem in meiner Umgebung zu bemerken, aber die Lösung selbst war relativ einfach.

Recommended Posts

Same-Site-Attributeinstellung des Cookies in Django
Abfrageparameter für GET-Anforderungen mit Django abrufen
Modell in Django
Internationalisierungsunterstützung mit Django 1.9
Führen Sie eine mehrdeutige Suche nach MySQL in Django durch
Form in Django
Lernnotizen für die Migrationsfunktion im Django-Framework (2)
Listenmethode für verschachtelte Ressourcen im Django REST-Framework
Lernnotizen für die Migrationsfunktion im Django-Framework (3)
Lernnotizen für die Migrationsfunktion im Django-Framework (1)
Modelländerungen in Django
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
Best Practices für die dynamische Verarbeitung von LINE Flex-Nachrichten in Django