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
.
fonte
2017-05-12 22:02:13
È necessario impostarli ma senza utilizzare il flash var. Questo ha senso? Sto solo chiedendo di capire cosa vuoi ottenere. – pduersteler
Se fossero memorizzati nei cookie li impostarei direttamente: 'cookies [: flash] [: notice] =" Hello World! "'. Ma sono memorizzati altrove. Quindi la domanda è: dove sono memorizzati :) – fl00r
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