In ruby on rails quando si esegue session[:foo] = nil
lascia una voce denominata :foo
nell'oggetto di sessione. Come puoi sbarazzarti di quella singola voce dall'oggetto di sessione?Come si cancella una singola voce da una sessione di ruby on rails?
risposta
In realtà esiste un modo per eliminare un valore dalla sessione. Come RichH ha detto che la variabile di sessione è un'istanza di CGI :: Session. Quando si immette qualcosa come session[:foo]
, in realtà viene visualizzato tale simbolo in una variabile di istanza @data
nell'oggetto di sessione. Quella variabile di dati è un hash.
MODIFICA: C'è una variabile di istanza di dati nella classe CGI :: Session. Se vai allo docs e guarda il codice sorgente per il metodo []=
vedrai che c'è un membro @data
.
Quindi, per eliminare session[:foo]
tutto quello che dovete fare è di accesso che @data
variabili dall'interno della sessione
session.data[:foo]
Ora per cancellarlo:
session.data.delete :foo
Una volta fatto questo il non ci dovrebbero essere più foo nella tua variabile di sessione.
Poiché la sessione è un Ruby CGI::Session e non un hash, l'eliminazione di chiamata cancellerà effettivamente la sessione. Elimina non ha parametri: questo è il mio messaggio "Numero errato di argomenti (1 o 0)" quando si tenta ciò che hyuan suggerisce.
Il modo generalmente accettato per cancellare una voce di sessione è con sessione [: foo] = nil come suggerisci. È lontano dall'ideale, ma affermazioni come session [: foo] .nil? si comporterà come previsto.
Vorrei davvero che si comportasse come un normale Hash ... ma non è così.
Sembra che la versione più semplice funzioni. Tutti i negozi (Cookie, File, ActiveRecord, ...) utilizzano AbstractStore::SessionHash
come oggetto che contiene i dati, i diversi negozi forniscono solo i mezzi per caricare e salvare le istanze AbstractStore::SessionHash
.
AbstractStore::SessionHash
eredita da Hash
, quindi questo rinvia al metodo Hash#delete
:
session.delete(:key_to_delete)
- 1. Ruby on Rails: Creazione di una voce di modello con un'associazione belongs_to
- 2. Ruby on Rails: Cetriolo: come faccio a selezionare una singola funzione?
- 3. Come posso profilare una richiesta in Ruby on Rails?
- 4. Curl on Ruby on Rails
- 5. Striscia html da stringa Ruby on Rails
- 6. Neo4j - impaginazione da Ruby on Rails
- 7. In Django, come si cancella una sessionkey?
- 8. Come integrare una libreria python in un'applicazione Ruby on Rails
- 9. Come posso dichiarare una variabile globale in Ruby on Rails?
- 10. Pubblicazione sull'app Ruby on Rails da Android
- 11. Rendering di una vista dal mio Ruby on Rails Gem
- 12. Aggiornamento automatico di una pagina in Ruby on Rails
- 13. Ruby on Rails: come si ottiene l'URL precedente?
- 14. parametro passaggio da link_to Ruby on Rails
- 15. Ruby on Rails versus Python
- 16. Ruby on Rails colonna decimale
- 17. Ruby on Rails, rilevamento Javascript
- 18. Disabilitare una casella di testo in Ruby on Rails?
- 19. Utilizzo di Send_File su una fonte remota (Ruby on Rails)
- 20. Docsplit Ruby on Rails
- 21. Come manipolare DOM con Ruby on Rails
- 22. Busting Ruby on Rails Myths
- 23. Ambiente Ruby on Rails portatile
- 24. downgrade di Ruby on Rails
- 25. Ruby on Rails redirect_to arguments
- 26. Ruby on Rails link_to un'immagine
- 27. Campo Ruby on Rails medio?
- 28. Ruby on rails e Node.js
- 29. Esercitazione su Ruby on Rails
- 30. Come passare da un mese all'altro in Ruby on Rails
È che attraversavano portatile tutti i negozi di sessione? Sembra un po 'intimo in quanto l'attributo dei dati non è menzionato nei documenti. – RichH
Sinceramente non lo so. L'ho scoperto usando il debugger e ispezionando la variabile di sessione. Sono stato in grado di trovare un piccolo supporto per la mia risposta, tuttavia, http://tinyurl.com/cp7ntm, controlla l'ultimo metodo in cui assegna session_data = @ _session.data. Questo è il massimo che ho trovato su di esso – vrish88
Ho appena aggiornato la mia risposta con una fonte molto migliore per alcuni documenti sull'argomento. – vrish88