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

133

Ich kann es anscheinend nirgendwo finden ... Wie lösche / zerstöre / setze / leere / lösche ich die Sitzung eines Benutzers in Rails? Nicht nur ein Wert, sondern das Ganze.

tybro0103
quelle

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!

Gdeglin
quelle
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 .

Lavixu
quelle
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)
vjnan369
quelle
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) }
vladCovaliov
quelle
2

Fügen Sie diesen Code Ihrem ApplicationController hinzu

def reset_session
  @_request.reset_session
end

(Ich weiß nicht, warum niemand oben diesen Code erwähnt hat, da er mein Problem behoben hat.) Http://apidock.com/rails/ActionController/RackDelegation/reset_session

David Mesaros
quelle
Ich finde das @_request.reset_sessionund reset_sessionbeide arbeiten und machen vielleicht das Gleiche?
Barlop