2009-07-12 9 views
5

Tengo un problema con el uso de variables de sesión. Tengo dos controladores llamados 'graduate_students_controller' y 'current_students_controller'. Cada uno de estos controladores controla diferentes archivos de vista. Estoy usando variables de sesión con estos dos controladores para almacenar información de la sesión.Rieles: ¿cómo se puede acceder a las variables de sesión usando múltiples controladores?

Aquí está el problema. Digamos que tengo dos archivos de vista 'reports/current_students_list', 'reports/graduate_students_list', cada uno controlado por separado por los controladores mencionados anteriormente.

Ahora, si intento abrir esas dos páginas web desde el mismo navegador e intento trabajar con ellas simultáneamente, aparece un error de "acceso a ningún objeto" desde la primera página cargada. El 'objeto nil' se refiere a una variable de sesión a la que se supone que debe acceder la primera página. Sin embargo, cuando uso cualquiera de esas dos aplicaciones web individualmente, funcionan bien.

Me parece que las variables de sesión de la aplicación web cargada en primer lugar. están siendo sobreescritos por la aplicación web cargada en segundo lugar. tal vez porque la segunda página almacena una nueva cookie sobre la primera?

¿Cómo puedo solucionar esto?

Cualquier sugerencia es muy apreciada.

Para aclarar un poco más: Los dos controladores pertenecen a la misma aplicación Rails. Y no estoy usando nombres de variable de sesión idénticos dentro de ambos controladores. Así que no puedo ver por qué pueden sobreescribirse

Soy nuevo en los rieles y realmente agradecería algo de ayuda con este problema. Gracias.

+0

¿Con qué versión de Rails trabajas? Además, ¿estos controladores están en la misma aplicación de Rails o en diferentes aplicaciones? –

+0

Hola John, Estoy usando la versión de carriles es 2.2.2. Y mi versión de gemas especificada en mi environment.rb es la siguiente: ----------- # Especifica la versión gema de Rails que se usará cuando el proveedor/los rieles no estén presentes RAILS_GEM_VERSION = '1.2.3 '¿a menos que esté definido? RAILS_GEM_VERSION --------------- (No estoy usando ninguna versión más nueva en mi máquina local en este momento, ya que esta es la configuración actual en nuestro servidor de producción. Y quiero probar mi aplicaciones según ellos) sí, estos controladores y archivos de vista pertenecen a la misma aplicación de Rails. ¿Alguna idea de lo que está causando este problema? Gracias John – Vicer

+0

Para dejarlo en claro, las variables de sesión a las que acceden estos dos controladores no tienen nombres comunes.Entonces, no hay razón para sobrescribir una variable de sesión a menos que la página web cargada en segundo lugar almacene una nueva cookie sobre la existente (la que la primera página cargada haya almacenado). Esta es la única razón lógica que se me ocurre. Pero, ¿cómo puedes arreglar algo como esto? ¿Alguien se encontró con una situación similar antes? – Vicer

Respuesta

4

No estoy seguro si está ejecutando dos aplicaciones, o si se refiere a dos controladores bajo la misma aplicación. Si está buscando diferentes aplicaciones web, creo que está utilizando el mismo nombre y la misma clave de sesión en su entorno para cada una de estas aplicaciones. Intente cambiar el valor de la clave en su environment.rb:

config.action_controller.session = { :key => "_myapp_session", :secret => "..." } 

Si está utilizando la misma variable de sesión a partir de dos controladores diferentes en la misma aplicación, a continuación, tendrá que escribir el código para acomodar esto, aunque yo No recomendaría hacer esto. Al acceder a sus datos de la sesión, la verificación de los valores nulos:

session[:some_key].nil? 

y asegúrese de que el código común (es decir, en la application_controller.rb) no es sobrescribir sus valores.

+0

Hola Matt, me refiero a dos controladores en la misma aplicación. Cuando dice "mismas variables de sesión", ¿se refiere a nombres de variable de sesión idénticos utilizados por ambos controladores? No, no estoy haciendo eso, los dos controladores están usando diferentes nombres para sus variables de sesión. Eché un vistazo a mi application.rb y efectivamente encontré esto: sesión : session_key => '_StudDab_session_id' Así que supongo que este es el problema? ¿Cada vez que cargo una nueva página, la sesión actual se sobrescribe? ¿Puedo solucionar esto especificando claves de sesión únicas dentro de cada uno de los dos controladores? – Vicer

+0

No: la clave de sesión debe ser exclusiva de cada aplicación, no de los controladores de la misma aplicación. Creo que hay un error en alguna parte de tu aplicación que está aclarando el valor de tu sesión. Yo recomendaría registrar el valor de las variables de sesión en la parte superior de la acción de su controlador, y luego volver a registrarlas al final. Ver si cambian, y rastrear desde allí. – Codebeef

+0

Hola, Matt cambió la clave de sesión y solucionó el problema. Trataré de investigar y descubrir qué fue lo que lo causó. Es un problema bastante frustrante. Gracias por sus sugerencias Matt. – Vicer

Cuestiones relacionadas