Wenn zwei Django-Anwendungen Site1 und Site2 gleichzeitig auf verschiedenen Ports desselben Servers ausgeführt werden und wir uns gleichzeitig über verschiedene Registerkarten desselben Browsers anmelden. Dann passiert das. Wenn wir uns bei Site2 anmelden, werden die auf Site1 angemeldeten Benutzer rausgeschmissen.
Warum passiert das? Dies hängt mit dem Sitzungsframework von Django zusammen. Hier eine kurze Einführung: Wenn wir eine Django-Website zum ersten Mal besuchen, generiert Django eine Sitzung, um einige Informationen über die aktuelle Sitzung zu speichern. Gleichzeitig wird ein Hash-Wert session_key generiert und an den Client gesendet. Der Name dieses Cookies wird entsprechend dem SESSION_COOKIE_NAME in der Einstellung festgelegt. Der Standardwert ist „sessionid“ (Hervorhebung hinzugefügt). Auf diese Weise wird der Sitzungsschlüssel beim nächsten Mal zusammen mit dem Cookie an den Server gesendet. Der Server sucht basierend auf session_key nach dem entsprechenden Sitzungsobjekt und erhält die Informationen der aktuellen Sitzung, natürlich einschließlich Anmeldeinformationen.
Es gibt also nur eine Wahrheit zu der obigen Situation (Conan stößt mit der Brille ins Gesicht):
Wenn wir uns bei Site1 anmelden, erhalten wir ein Cookie namens Sessionid , in dem session_key1 gespeichert ist.
Wenn wir uns bei Site2 anmelden, wird das Cookie mit der Bezeichnung „sessionid“ aktualisiert und hat jetzt den Wert „session_key2“ (der Browser speichert Cookies basierend auf IP statt auf Port, daher wird der gleiche Name verwendet). aktualisierte Cookies).
Wenn wir nun den neuen session_key verwenden, um auf Seite 1 zuzugreifen, können wir die ursprünglichen Anmeldeinformationen nicht mehr abrufen und müssen uns erneut anmelden.
Wie lässt sich das Problem lösen? Nachdem Sie den oben genannten Mechanismus verstanden haben, müssen Sie nur noch SESSION_COOKIE_NAME in der Einstellung festlegen. Sie können beispielsweise SESSION_COOKIE_NAME = „site2“ in Site2 festlegen und den Standardwert in Site1 verwenden. Natürlich können Site1 und Site2 auch gleichzeitig eingestellt werden.
Ausführlichere Erklärungen, wie Sie Django-Anwendungen mit unterschiedlichen Ports auf demselben Server ermöglichen, im selben Browser geöffnet zu werden, finden Sie auf der chinesischen PHP-Website für verwandte Artikel!