2011-10-12 18 views
13

Estoy aprendiendo Rails leyendo la guía en línea (para Rails v2.3). La guía es genial, sin embargo, hay una confusión para mí, es decir:Rails v2.3: Diferencia entre sesión y cookies

hay un capítulo explica el Session de Rails y otro capítulo explica Cookies de Rails. La explicación es fácil de entender por separado, pero cuando los comparo, el lector como yo no ve la diferencia significativa entre la sesión y las cookies. Especialmente ¿bajo qué situación se debe usar la sesión y bajo qué situación se deben usar las Cookies?

Además, en el capítulo de la sesión, hay un concepto de CookieStore, ¿cuál es la diferencia entre CookieStore y Cookies entonces?

¿Podría alguien explicarme esto?

Respuesta

22

Sesiones & Las cookies tienen la capacidad de almacenar cierta información (por ejemplo, la identificación del usuario actual) entre dos o más solicitudes que (en http) son, por lo demás, apátridas.

Pero la sesión es más un concepto abstracto relacionado con la noción de estar en cierto estado durante un tiempo específico: la información que contiene se puede almacenar en la base de datos, en un archivo del lado del servidor, en redis hash O en una cookie.

Las cookies son siempre el pequeño archivo de texto que los navegadores tienen que almacenar algunos datos persistentes entre las solicitudes ... Pero tener algunos datos en el lado del cliente puede ser inseguro, por eso a menudo está encriptado. Pero es cierto que la noción puede superponerse con la sesión.

TL; DR: sesión el concepto abstracto de la celebración de datos temporales. Cookies una forma (común) de hacerlo.

6

En cuanto a mí, la principal diferencia es que los datos de sesión almacenados en el servidor, mientras que las cookies se almacenan en el cliente (navegador).

Así que puede confiar en los datos de la sesión. La información de la cookie se puede manipular, robar y, por lo tanto, no se debe confiar para un uso crítico (por ejemplo, para un acceso correcto).

El segundo punto es que las cookies tienen un tamaño limitado y solo se basan en texto. Puede almacenar en sesión muchos objetos complejos (pero tenga cuidado con el consumo de memoria), y no tiene que transferirlos al cliente y luego volver a cada solicitud.

+1

Estas sesiones basadas en cookies existen en el lado del cliente y sus datos están codificados. – secretlm

7

Una cookie es un pequeño archivo de texto almacenado en el navegador.

Una sesión es el concepto de un estado de "uso", y ese estado puede tener datos asociados. Rails realiza un seguimiento de las sesiones con cookies, y le permite elegir otro almacenamiento para los datos asociados y acceder a él con la misma interfaz session.

CookieStore significa que toda la información de la sesión se almacena dentro de la misma cookie. Puede optar por utilizar otras tiendas cuando corresponda, y seguirá estando disponible con sus métodos de acceso session.

Además de la sesión, puede configurar otras cookies para almacenar información en el navegador del usuario. Estos no están vinculados a la sesión y se pueden configurar, acceder y eliminar de forma independiente.

Ejemplo 1, el almacenamiento de carrito de la compra de un usuario que ha iniciado sesión en una sesión en:

session[:embarassing_products] = ['ooh', 
            'naughty', 
            'lucky_im_using_activerecord_store', 
            'only_the_session_id_is_in_the_cookie', 
            'other_data_arent_in_the_browser'] 

El carro de compras se conserva durante la sesión del usuario. Puede configurar la sesión para que finalice cuando la ventana del navegador se cierre, cuando el usuario cierre la sesión o cuando pase una cierta cantidad de tiempo.

Ejemplo 2, recordando la última preferencia de idioma del navegador para su dominio en una cookie:

cookie[:lang] = 'en-US' 

Esta información se almacena dentro de la propia galleta. A menos que la cookie expire o sea eliminada (por usted o por el usuario), permanece dentro del navegador.

3

Y normalmente la sesión solo persiste hasta que el usuario apaga su navegador. Eso es útil para los inicios de sesión típicos. Mientras que si necesita información para persistir entre sesiones, puede usar una cookie de mayor duración, por ejemplo, una marca "recordarme" que persiste incluso después de que se reinicie el navegador.

Cuestiones relacionadas