2011-09-07 16 views
5

Pensé que estaban almacenados en cookies, pero no, las cookies que inspeccionan no me dan nada. Las sesiones tampoco los almacenan. Entonces, ¿dónde puedo encontrarlos?¿Dónde se almacenan los mensajes flash?

Necesito esto para configurarlos directamente (no a través de flash hash).

+1

Debe configurarlos pero sin utilizar la varilla flash. ¿Esto tiene sentido? Solo preguntando para entender lo que quieres lograr. – pduersteler

+0

Si estuvieran almacenados en cookies, los establecería directamente: 'cookies [: flash] [: notice] =" Hello World! "'. Pero están almacenados en otro lugar. Entonces la pregunta es: ¿dónde están almacenados :) – fl00r

+0

De guías de raíl: El flash es una "parte especial de la sesión" que se borra con cada solicitud. y también Todas las tiendas de sesión usan una cookie para almacenar una ID única para cada sesión Creo que si usamos cookieStore para almacenar datos de sesión, solo flash se almacenará en cookies. Generalmente utilizamos solo cookies, así que creo que el mensaje flash debe estar en algún lugar de la cookie [: session]. Bueno, soy novato en los rieles. corrígeme si estoy equivocado. – rtcoms

Respuesta

7

Se almacenan in your session store. El valor predeterminado es que rails 2.0 es el almacén de cookies, pero marca config/initializers/session_store.rb para verificar si estás utilizando algo distinto al predeterminado.

2

De acuerdo con APIdock : ActionController/Flash, se almacena en una sesión.

Tenga en cuenta que si las sesiones están deshabilitadas, solo flash.now funcionará.

Al usar flash.now, sus valores no están disponibles en la próxima solicitud.

+0

Creo que quisiste vincular a http://apicock.com/rails/ActionDispatch/Request/flash, 'ActionController :: Flash' solo existe en los rieles 1.0. –

+0

whoops, usted es – pduersteler

+0

puede editar su respuesta ;-) –

0

Estaba buscando una respuesta más detallada, y terminé encontrándola a través de la investigación. Lo siguiente se aplica si su proyecto está almacenando su sesión en una base de datos de Postgres.

NOTA: Su aplicación puede tener conexiones con más de una base de datos. Todavía no he descubierto cómo Rails determina cuál de estas conexiones usar. Mi proyecto session_store.rb está vacío.

Encontrará los mensajes flash en la tabla sessions. Hay una columna llamada data que contiene una cadena codificada en base64.

Si decodifica la cadena, encontrará un blob binario que contiene no solo los mensajes flash (en forma ordenada, para que puedan representar cualquier tipo de objeto Ruby), sino también el token CSRF y varias otras cosas .

Todo el blob es en realidad una tabla hash ordenada. Se puede desasociar en Ruby con Marshal.load, y después de realizar cualquier cambio, se puede volver a ordenar con Marshal.dump.

Cuestiones relacionadas