2016-08-03 9 views
3

Ich arbeite an Sitzungen in Django.Django: Clearing-Sitzungen in django_session Tabelle

Standardmäßig speichert Django Sitzungen in django_session, ich habe herausgefunden, dass es keine Möglichkeit gibt, Sitzungen zu löschen.

obwohl ClearSession verwendet werden kann, um Zeilen zu löschen. Es wird auch empfohlen, dies als Cron-Job auszuführen.

Aber dies bedeutet, alle eingeloggten Benutzer ausloggen..Richtig? (bin mir nicht sicher)

Ist das die richtige Praxis?

+0

Mögliche Duplikat [Django: Sitzungsdatenbanktabelle Bereinigung] (http://stackoverflow.com/questions/7296159/django-session-database-table- Aufräumen) –

+2

Nein, 'clearsessions' löscht nur abgelaufene Sitzungen. –

+0

Mögliches Duplikat von [Lösche Sitzungsschlüssel von allen Benutzern] (http://stackoverflow.com/questions/30864711/delete-session-key-from-all-users) – e4c5

Antwort

4

Die Django documentation Staaten (Betonung von mir):

Shop Sitzung Clearing

Als Benutzer neue Sitzungen auf Ihrer Webseite zu erstellen, kann Datensitzung in Ihrer Sitzung speichern akkumulieren. Wenn Sie die Datenbank Backend verwenden, wird die django_session Datenbanktabelle größer. Wenn Sie das Datei-Back-End verwenden, enthält Ihr temporäres Verzeichnis eine ansteigende Anzahl der Dateien.

Um dieses Problem zu verstehen, überlegen Sie, was mit der Datenbank Backend passiert. Wenn sich ein Benutzer anmeldet, fügt Django der Datenbanktabelle django_session eine Zeile hinzu. Django aktualisiert diese Zeile jedes Mal, wenn sich die Sitzungsdaten ändern. Wenn sich der Benutzer manuell abmeldet, löscht Django die Zeile. Aber wenn der Benutzer nicht abmeldet, wird die Zeile nie gelöscht. Ein ähnlicher Prozess passiert mit dem Datei-Backend.

Django bietet keine automatische Bereinigung abgelaufener Sitzungen. Daher ist es Ihre Aufgabe, abgelaufene Sitzungen regelmäßig zu löschen. Django stellt zu diesem Zweck einen Bereinigungsverwaltungsbefehl zur Verfügung: clearsessions. Es wird empfohlen, diesen Befehl auf einer normalen -Basis aufzurufen, zum Beispiel als einen täglichen Cron-Job.

Beachten Sie, dass das Cache-Back-End nicht anfällig für dieses Problem ist, da automatisch veraltete Daten automatisch zwischenspeichert. Das Cookie-Backend ist auch nicht , da die Sitzungsdaten von den Browsern der Benutzer gespeichert werden.

Diesen Link gefunden in Abid A's answer.

Der clearsessions Befehl

Kann als cron-Job ausgeführt werden oder direkt abgelaufene Sitzungen zu reinigen.

So wird es nicht jeden Benutzer abmelden.

Wie von Kevin Christopher Henry in einer comment und in der anderen possible duplicate Ihrer Frage flagged by e4c5 erwähnt.

+0

das ist okay! .. aber das wird sich abmelden alle angemeldeten Benutzer..rechts? – sachsure

+0

Sie können alle Zeilen manuell löschen, die älter als 'x' sind. –

+0

@sachsure Ich aktualisierte die Antwort mit mehr Informationen aus dem Dokument. –

0
  1. Django 1.6 oder höher

    python manage.py clearsessions

  2. Django 1.5 oder niedriger

    python manage.py cleanup

  3. Von Django Shell

    from django.contrib.sessions.models import Session

    Session.objects.all().delete()

  4. django-session-cleanup cornJob

  5. Clearing-Sitzung in Logout (basierend auf Sitzungsschlüssel in Anforderung)

from django.contrib.sessions.models import Session

session_key = request.data['sessionKey']

session = Session.objects.get(session_key=session_key)

Session.objects.filter(session_key=session).delete()

Session.objects.all().delete()

Verwandte Themen