2011-09-07 10 views
5

Pensavo fossero memorizzati nei cookie - ma no, i cookie che controllano non mi danno nulla. Anche le sessioni non le memorizzano. Quindi, dove posso trovarli?Dove sono memorizzati i messaggi flash?

Ho bisogno di questo per impostarli direttamente (non tramite l'hash flash).

+1

È necessario impostarli ma senza utilizzare il flash var. Questo ha senso? Sto solo chiedendo di capire cosa vuoi ottenere. – pduersteler

+0

Se fossero memorizzati nei cookie li impostarei direttamente: 'cookies [: flash] [: notice] =" Hello World! "'. Ma sono memorizzati altrove. Quindi la domanda è: dove sono memorizzati :) – fl00r

+0

Da railsguides: Il flash è una 'parte speciale della sessione' che viene cancellata con ogni richiesta. e Tutti gli archivi di sessione utilizzano un cookie per memorizzare un ID univoco per ogni sessione (è necessario utilizzare un cookie, Rails non consente di passare l'ID di sessione nell'URL poiché questo è meno sicuro). Penso che se usiamo cookieStore per memorizzare solo i dati di sessione, allora il flash verrà archiviato nei cookie. Generalmente usiamo solo cookieStore, quindi penso che il messaggio flash dovrebbe essere da qualche parte nel cookie [: sessione]. Beh, sono un principiante nei binari. correggimi se sbaglio. – rtcoms

risposta

7

Sono memorizzati in your session store. L'impostazione predefinita poiché rails 2.0 è l'archivio dei cookie, ma controllare in config/initializers/session_store.rb per verificare se si sta utilizzando qualcosa di diverso da quello predefinito.

2

Secondo APIdock : ActionController/Flash, è memorizzato in una sessione.

Nota che se le sessioni sono disabilitate, solo flash.now funzionerà.

Quando si utilizza flash.now, i valori non sono disponibili nella richiesta successiva.

+0

Credo che tu intendessi collegarti a http://apidock.com/rails/ActionDispatch/Request/flash, 'ActionController :: Flash' esiste solo nelle guide 1.0. –

+0

whoops, giusto sei – pduersteler

+0

potresti modificare la tua risposta quindi ;-) –

0

Stavo cercando una risposta più dettagliata, e ho finito per trovarlo attraverso le indagini. Quanto segue si applica se il progetto sta memorizzando la sua sessione in un database Postgres.

NOTA: L'app potrebbe avere connessioni a più di un DB. Non ho ancora capito come Rails determina quale di queste connessioni usare. Il mio progetto session_store.rb è vuoto.

I messaggi flash sono disponibili nella tabella sessions. C'è una colonna chiamata data che contiene una stringa con codifica Base64.

Se decodificare la stringa, troverete un blob binario che non contiene solo i messaggi flash (in forma schierato, in modo che possano rappresentare qualsiasi tipo di oggetto Ruby), ma anche il token CSRF, e diverse altre cose .

L'intero blob è in realtà una tabella hash marshalling. Può essere unmarshalled in Ruby con Marshal.load e, dopo aver apportato le modifiche, è possibile eseguire il confronto con Marshal.dump.