Wie kann man eine Sitzung in Schienen leeren / zerstören?


Antworten:


203

Verwenden Sie die Methode reset_session in einem Controller, um das Ganze zu löschen.

reset_session

Hier ist die Dokumentation zu dieser Methode: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Setzt die Sitzung zurück, indem alle darin gespeicherten Objekte gelöscht und ein neues Sitzungsobjekt initialisiert werden.

Viel Glück!


1
Für datenbankbasierte Sitzungen (die Sie wahrscheinlich verwenden sollten) können Sie durch eine Abfrage ablaufen : guides.rubyonrails.org/security.html#session-expiry
m33lky

44

Session in Rails ist ein Hash-Objekt. Daher funktioniert jede Funktion, die zum Löschen von Hash verfügbar ist, mit Sitzungen.

session.clear

oder wenn bestimmte Schlüssel zerstört werden müssen:

session.delete(key)

In Schienen getestet 3.2

hinzugefügt

Die Leute haben von erwähnt, session={}ist eine schlechte Idee. In Bezug auf session.clearLobati-Kommentare: Es sieht so aus, als ob Sie reset_session [besser als session.clear] verwenden sollten, da es eine andere Bereinigung durchführt, die über die von session.clear hinausgeht. Intern ruft reset_session session.destroy auf , das selbst clear sowie einige andere Dinge aufruft .


Hat jemand irgendwelche Gedanken über die Vorzüge dieser Methode gegenüber der von Gdeglin empfohlenen?
Peter Berg

3
Dies kann verwendet werden, wenn Sie andere Parameter beibehalten, aber ein bestimmtes Schlüsselwertpaar löschen möchten.
Lavixu

1
Dadurch wird die Sitzung überhaupt nicht zurückgesetzt, sondern eine lokale Variable zugewiesen. Verwenden Sie niemals diese Technik, um die Sitzung zurückzusetzen: session = {}
alexspeller

4
In der Rails-Dokumentation in Abschnitt 5.1 Zugriff auf die Sitzung wird empfohlen, reset_session zu verwenden, wenn Sie vom Skript eingefügte Schlüssel / Wert-Paare (z. B. etwas, das von einem Controller eingefügt wurde) entfernen und eine neue Sitzung generieren möchten. Wenn Sie nur die von Ihnen festgelegten Schlüssel / Wert-Paare zurücksetzen möchten, setzen Sie diese Schlüssel auf Null.
Sargas

1
@barlop Es sieht so aus reset_session, als ob Sie wahrscheinlich besser dran sind , da es andere Aufräumarbeiten macht, die über das hinausgehen session.clear. Intern reset_sessionAnrufesession.destroy , die selbst clearauch einige andere Sachen anrufen .
Lobati

6

um die Sitzung eines Benutzers zu löschen

session.delete(:user_id)

Achtung, Sie können den Benutzerdatensatz aus der Datenbank löschen!
Arthur

2
@ Arthur Das stimmt nicht. Sie löschen jedoch nur den Schlüssel: user_id aus der Sitzung und nicht die gesamte Sitzung
Andión

5

Um nur bestimmte Parameter zu löschen, können Sie Folgendes verwenden:

[:param1, :param2, :param3].each { |k| session.delete(k) }

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.