ruby-on-rails - rails session variable
Rails ActiveRecord Session Store en HTML5 SessionStorage en lugar de Cookie (2)
Mi aplicación requiere que los usuarios inicien sesión en cuentas diferentes en pestañas separadas en su navegador (nos dirigimos específicamente a Chrome). Debido a que Rails usa cookies para almacenar información de la sesión, cuando el usuario inicia sesión, se registran en todas las pestañas del navegador. Estoy usando el método de almacenamiento de sesión de ActiveRecord, pero incluso el ID de la sesión se guarda como una cookie.
Parece que hay una solución para usar el mecanismo sessionStorage de HTML5, que está limitado en su alcance a la pestaña o ventana en la que el usuario está conectado. Parece que todo lo que tengo que hacer es dirigir los raíles para guardar la información de la sesión en la sesión Almacenamiento en lugar de las cookies. Pero no puedo encontrar información sobre esto en absoluto.
Suponiendo que no hay forma de configurar el almacén de sesiones para hacer esto en Rails, ¿es posible anular el mecanismo de almacenamiento de sesión de ActiveRecord? ¿Alguna sugerencia sobre dónde buscar información sobre cómo hacer esto?
Ahora configura el almacén de sesiones basado en cookies a través de un inicializador, probablemente en config / initializers / session_store.rb . En Rails 3, el almacén de sesiones es una pieza de middleware, y las opciones de configuración se transfieren con una sola llamada a config.session_store:
Su :: Application.config.session_store: cookie_store,: key => ''_session''
Puede poner todas las opciones adicionales que desee en el hash con la tecla: p. Ej.
Your::Application.config.session_store :cookie_store, {
:key => ''_session_id'',
:path => ''/'',
:domain => nil,
:expire_after => nil,
:secure => false,
:httponly => true,
:cookie_only => true
}
A diferencia de las cookies, las entradas de sessionStorage no se pueden crear con encabezados de respuesta y no se incluyen automáticamente en los encabezados de solicitud. Esto supone una gran carga de trabajo para administrar la autenticación basada en sessionStorage / localStorage en el Javascript del lado del cliente. Todo el acceso autenticado debería ser a través de las solicitudes Javascript XHR que incluyen explícitamente el token de autenticación.
Si desea que el usuario pueda tener varias sesiones simultáneas y no desea construir su sitio como SPA , deberá adoptar un enfoque alternativo con las cookies.
Una forma sería usar múltiples dominios para forzar las cookies en subespacios separados. Establezca un registro DNS comodín y configure su servidor web para que acepte todas las solicitudes coincidentes independientemente del prefijo. Por ejemplo, los usuarios pueden estar por defecto en www.yoursite.com
. 1234abcd.www.yoursite.com
proporcionar un enlace ''crear nueva sesión'' que abre una nueva pestaña a un subdominio aleatorio, por ejemplo, 1234abcd.www.yoursite.com
. Sin embargo, esto puede crear un problema si está utilizando SSL; Los certificados SSL comodín tienden a ser mucho más caros.
Una forma más sencilla sería educar a los usuarios sobre los modos privado / icognito de sus navegadores, que mantienen tiendas de cookies independientes. Sin embargo, lograr que los usuarios lean la documentación siempre es un desafío.