Come svuotare / distruggere una sessione in rotaie?


Risposte:


203

Per cancellare tutto usa il metodo reset_session in un controller.

reset_session

Ecco la documentazione su questo metodo: http://api.rubyonrails.org/classes/ActionController/Base.html#M000668

Reimposta la sessione cancellando tutti gli oggetti memorizzati e inizializzando un nuovo oggetto sessione.

In bocca al lupo!


1
Per le sessioni basate su database (che probabilmente dovresti usare) puoi scadere tramite una query : guide.rubyonrails.org/security.html#session-expiry
m33lky

44

session in rails è un oggetto hash. Quindi qualsiasi funzione disponibile per cancellare l'hash funzionerà con le sessioni.

session.clear

o se chiavi specifiche devono essere distrutte:

session.delete(key)

Testato su binari 3.2

aggiunto

La gente ha menzionato session={}è una cattiva idea. Per quanto riguarda session.clear, commenta Lobati- Sembra che probabilmente stai meglio usando reset_session [rispetto a session.clear], in quanto fa qualche altra pulizia oltre a ciò che fa session.clear. Internamente, reset_session chiama session.destroy , che a sua volta chiama chiaramente anche altre cose.


Qualcuno ha qualche idea sul merito di questo metodo rispetto a quello raccomandato da Gdeglin?
Peter Berg,

3
Questo può essere usato quando vuoi conservare altri parametri ma eliminare una particolare coppia di valori chiave.
Lavixu,

1
Questo non ripristinerà affatto la sessione, assegnerà una variabile locale. Non usare mai questa tecnica per ripristinare la sessione: session = {}
alexspeller

4
La documentazione di Rails , nella sezione 5.1 Accesso alla sessione, consiglia di utilizzare reset_session se si desidera rimuovere le coppie chiave / valore inserite nello script (es: qualcosa inserito da un controller) e generare una nuova sessione. Se si desidera ripristinare solo le coppie chiave / valore impostate, impostare quelle chiavi su zero.
sargas,

1
@barlop Sembra che tu probabilmente stia meglio usando reset_session, come fa qualche altra pulizia oltre a ciò che session.clearfa. Internamente, reset_sessionchiamasession.destroy , che a sua volta chiama clearanche altre cose .
lobati,

6

per eliminare la sessione di un utente

session.delete(:user_id)

Attenzione, è possibile eliminare il record utente dal database!
Arthur,

2
@Arthur Non è vero. Ma eliminerai solo la chiave: user_id dalla sessione e non l'intera sessione
Andión

5

Per cancellare solo alcuni parametri, è possibile utilizzare:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.