Der Django-Sitzungsschlüssel ändert sich bei der Authentifizierung

8

Ich habe eine Django-App, die die Produktauswahl der Benutzer für authentifizierte Benutzer aufzeichnet. Ich beabsichtige, die Variable request.session.session_key zu verwenden, um anonyme Daten mit einem Benutzer zu verknüpfen, wenn sie sich später für eine Registrierung entscheiden, a la diesen Beitrag:

Django speichert anonyme Benutzerdaten

Es sieht jedoch so aus, als ob sich der Sitzungsschlüssel ändert, wenn sich der Benutzer anmeldet / registriert, so dass der Sitzungsschlüssel nicht mehr mit dem Benutzer verknüpft werden kann. Ist dies das korrekte Verhalten des Django-Session-Frameworks? Gibt es einen soliden Weg, um die Funktionalität zu erreichen, die ich suche?

Jede Hilfe sehr geschätzt.

    
Darwin Tech 20.12.2012, 19:07
quelle

3 Antworten

10

In settings.py

SESSION_ENGINE = 'youapp.session_backend'

im Verzeichnis youapp in der Datei session_backend.py

%Vor%

Und die Sitzung wurde nach dem Login nicht geändert

    
nnmware 07.02.2013 17:22
quelle
3

Obwohl der von nnmware vorgeschlagene Ansatz für diesen speziellen Fall funktioniert, gibt es einen besseren.

Anstatt nichts in cycle_key zu tun, sollten wir die super-Methode aufrufen und dann die Sitzung speichern.

Wenn Sie in die ursprüngliche Funktion cycle_key schauen, werden Sie sehen, dass die Daten der alten Sitzung in die neue kopiert werden, aber nicht gespeichert werden.

In settings.py

%Vor%

Überprüfen Sie, ob SESSION_ENGINE auf ein Modul (.py-Datei) zeigt, aber nicht auf die Backend-Klasse!

Gehen Sie in Ihrer 'yourapp / session_backend.py' folgendermaßen vor:

%Vor%     
mennanov 03.03.2015 09:03
quelle
0

Eine der Lösungen wäre auch, alte Sitzungsdaten im Sitzungsspeicher zu aktualisieren:

%Vor%     
Domagoj Kovač 04.04.2018 14:52
quelle