2016-09-21 6 views
0

Von was ich verstanden here session_key ist der Primärschlüssel des Sitzungsobjekts.request.session.session_key nicht gesetzt trotz SESSION_SAVE_EVERY_REQUEST (Django 1.10.1)

Wenn ich request.session inspiziere, finde ich ein Sitzungsobjekt, aber der Primärschlüssel ist nicht gesetzt. Es scheint nicht gespeichert zu sein. Im Moment behebe ich dieses Problem, indem ich in jeder Ansicht überprüfe, ob request.session.session_key existiert und falls nicht, save() aufrufen.

Hat jemand eine Erklärung, warum ich nur ungespeicherte Sitzungsobjekte in meine Hände bekomme?

Antwort

2

Wenn Ihre Sitzungen korrekt eingerichtet sind, kann es sein, zwei Dinge geht:

  • Sessions werden am Ende gespeichert einer Anfrage. Selbst wenn die Sitzung nicht leer ist, hat sie keinen Primärschlüssel, bis die Antwort-Middleware ausgeführt wurde. Die Sitzung in der nächsten Anfrage wird einen Primärschlüssel haben.

  • Leere Sitzungen werden immer gelöscht. Wenn Ihre Sitzung keine Daten enthält, werden die Sitzung und das Cookie gelöscht, und die nächste Anforderung hat eine leere Sitzung mit einem leeren Primärschlüssel.

Dies sind beide gültige Szenarien, wenn Sitzungen ordnungsgemäß funktionieren. Auch mit SESSION_SAVE_EVERY_REQUEST sind leere Sitzungen noch gelöscht.

Wenn aus irgendeinem Grund das Sitzungscookie nicht gesetzt oder ungültig ist (weil es manipuliert wurde), wird der Sitzungsschlüssel ebenfalls auf None gesetzt.

+0

Ok, leere Sitzungen werden ebenfalls gelöscht. Das könnte es sein, ich dachte, jede Anfrage speichern bedeutet buchstäblich jede Anfrage. Vielen Dank! –

Verwandte Themen