Frage

In Ruby on Rails, wenn session[:foo] = nil tut es läßt einen Eintrag :foo im Sitzungsobjekt genannt. Wie können Sie diesen einzelnen Eintrag aus dem Session-Objekt loszuwerden?

War es hilfreich?

Lösung

Eigentlich ist es eine Möglichkeit zu bekommen einen Wert aus der Sitzung löschen. Wie RichH sagte die Sitzungsvariable eine CGI :: Session-Instanz ist. Wenn so etwas session[:foo] geben Sie suchen tatsächlich, dass das Symbol in einer @data Instanzvariable in dem Session-Objekt auf. Das Datenvariable ist ein Hash.

EDIT: Es gibt eine Dateninstanz-Variable in der CGI :: Session-Klasse. Wenn Sie gehen auf die docs Blick auf den Quellcode für die []= Methode, die Sie werden sehen, dass es ein @data Mitglied.

So löschen session[:foo] alles, was Sie tun müssen, ist, den Zugang, die variable @data aus dem Inneren der Sitzung

   session.data[:foo]

Jetzt löschen:

   session.data.delete :foo

Wenn Sie dies tun, das sollte es nicht mehr foo in Ihrer Sitzung variabel sein.

Andere Tipps

Es sieht aus wie die einfachste Version funktioniert . Alle Geschäfte (Cookie, Datei, Active, ...) verwenden AbstractStore::SessionHash als das Objekt, das die Daten enthält, die verschiedenen Geschäfte bieten die Möglichkeit, nur zu laden und die AbstractStore::SessionHash Instanzen zu speichern.

AbstractStore::SessionHash erbt von Hash, so dass dieser aufschiebt zur Hash#delete Methode:

session.delete(:key_to_delete)

Als Session ist ein Ruby CGI :: Session und kein Hash, löschen Aufruf wird Sitzung tatsächlich löschen. Löschen übernimmt keine Parameter -. Das ist mein, Sie bekommen die „falsche Anzahl von Argumenten (1 oder 0)“ angezeigt, wenn Sie versuchen, was hyuan schlägt

Die allgemein akzeptierte Art und Weise eine Sitzung Eingabe zu löschen ist mit session [: foo] = nil, wie Sie vorschlagen. Es ist bei weitem nicht ideal, aber Aussagen wie session [: foo] .nil? verhält sich wie erwartet.

Ich wünschte, es wirklich wie ein normaler Hash artig ... aber es funktioniert nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top