¿Diferencias entre cookies y sesiones?

154

Estoy entrenando en desarrollo web y estoy aprendiendo sobre JSP y Servlets . Tengo algún conocimiento de HttpSession: lo he usado en algunos de mis proyectos de muestra.

En los navegadores, he visto la opción de "eliminar cookies". Si elimino las cookies, también elimina la HttpSession.

¿Son iguales las cookies y la sesión? Cuáles son las diferencias entre ellos?

Tigre negro
fuente
Consulte también esta pregunta: < stackoverflow.com/questions/356562/… > Específicamente, los comentarios sobre las cookies firmadas.
Joel Coehoorn
Creo que la segunda respuesta a esta pregunta es más adecuada. Si selecciona esa como la mejor respuesta, mucha gente la leerá.
Suraj Jain

Respuestas:

180

Las sesiones son archivos del lado del servidor que contienen información del usuario, mientras que las cookies son archivos del lado del cliente que contienen información del usuario. Las sesiones tienen un identificador único que las asigna a usuarios específicos. Este identificador puede pasarse en la URL o guardarse en una cookie de sesión.

La mayoría de los sitios modernos utilizan el segundo enfoque, guardando el identificador en una cookie en lugar de pasarlo a una URL (lo que representa un riesgo de seguridad). Probablemente esté utilizando este enfoque sin saberlo, y al eliminar las cookies, borra efectivamente sus sesiones coincidentes a medida que elimina el identificador de sesión único contenido en las cookies.

Eran Galperin
fuente
10
" pasarlo a una URL (lo que representa un riesgo de seguridad) " . En realidad, ambos enfoques tienen riesgos de seguridad (diferentes). La ID secreta en la URL se puede asegurar si se realiza correctamente y si el usuario entiende que la URL es secreta y no se puede publicar en un foro público.
curiousguy
1
"El identificador puede pasarse en la URL o guardarse en una cookie de sesión". . ¿Dónde? lado del cliente o servidor? gracias por aclarar más
Adib Aroui
44
@whitelettersandblankspaces La cookie de sesión se almacena en el cliente (y su valor contiene el identificador de sesión único que se envía con cada solicitud para asignar la sesión del navegador a la sesión del usuario en el servidor).
WynandB
306

Una cookie es simplemente una cadena de texto corta que se envía de un lado a otro entre el cliente y el servidor. Puede almacenar name=bob; password=asdfasuna cookie y enviarla de un lado a otro para identificar al cliente en el lado del servidor. Podría pensar en esto como un intercambio con un cajero de banco que no tiene memoria a corto plazo y necesita que se identifique para cada transacción. Por supuesto, usar una cookie para almacenar este tipo de información es horrible e inseguro. Las cookies también tienen un tamaño limitado.

Ahora, cuando el cajero del banco sabe sobre su problema de memoria, puede escribir su información en una hoja de papel y asignarle un número de identificación corto. Luego, en lugar de dar su número de cuenta y licencia de conducir para cada transacción, puede decir "Soy cliente 12"

Traduciendo eso a los servidores web: el servidor almacenará la información pertinente en el objeto de sesión y creará una ID de sesión que enviará de vuelta al cliente en una cookie. Cuando el cliente devuelve la cookie, el servidor simplemente puede buscar el objeto de sesión utilizando la ID. Entonces, si elimina la cookie, la sesión se perderá.

Otra alternativa es que el servidor use la reescritura de URL para intercambiar la identificación de la sesión.

Supongamos que tiene un enlace: www.myserver.com/myApp.jsp puede pasar por la página y reescribir cada URL como www.myserver.com/myApp.jsp?sessionID=asdfo incluso www.myserver.com/asdf/myApp.jspe intercambiar el identificador de esa manera. Esta técnica es manejada por el contenedor de la aplicación web y generalmente se activa configurando la configuración para usar sesiones sin cookies.

Chris Cudmore
fuente
29
Esta es una explicación maravillosa anclada en una gran analogía del mundo real. Esta respuesta debería ser votada mucho más. Muy accesible para los novatos que son los que tienen más probabilidades de hacer esa pregunta.
user798719
2
¿Qué sucede si soy usuario y alguien más conoce mi ID de sesión?
Maria Ines Parnisari
3
@ I19 Posiblemente, puedan hacerse pasar por usted. Esto ha sucedido en escenarios de juego en línea: huela el wifi del hotel, robe una ID de sesión y acceda a la cuenta. Asegurar una sesión es otra historia completamente diferente.
Chris Cudmore
2
Entonces, ¿quién crea la cookie primero? Servidor o cliente? ¿O esto depende de la aplicación? (Diría que el servidor ya que de lo contrario representa amenazas de seguridad, pero creo que vale la pena mencionarlo)
Nha
44
@nha El servidor crea la sesión y la pasa en respuesta con la cookie. La sesión se crea en función de la lógica de la aplicación cuando desea que se cree. El cliente también puede crear una cookie, pero puede no ser de mucha utilidad en el escenario de identificación de la sesión porque el servidor puede no saber qué representa el valor en la sesión.
Azeem
4

Las cookies y la sesión almacenan información sobre el usuario (para que la solicitud HTTP tenga estado), pero la diferencia es que las cookies almacenan información en el lado del cliente (navegador) y las sesiones almacenan información en el lado del servidor. Una cookie es limitada en el sentido de que almacena información sobre usuarios limitados y solo almacena contenido limitado para cada usuario. Una sesión no está limitada de esa manera.

sanjay singh
fuente
1

Cookie es básicamente una matriz global a la que se accede a través de navegadores web. Muchas veces se utilizan para enviar / recibir valores. Actúa como un mecanismo de almacenamiento para acceder a valores entre formularios. El navegador puede deshabilitar las cookies, lo que agrega una restricción a su uso en comparación con la sesión.

La sesión se puede definir como algo entre iniciar y cerrar sesión. el tiempo entre el inicio y cierre de sesión del usuario es una sesión. La sesión almacena valores solo para el tiempo de sesión, es decir, antes de cerrar sesión. Las sesiones se utilizan para rastrear las actividades del usuario, una vez que inicia sesión.

RishikeshD
fuente
0

Google JSESSIONID . Esto explicará cómo la API de Servlet inicialmente utiliza la reescritura de URL y luego, si las cookies están habilitadas, las cookies para administrar las sesiones.

HTTP no tiene estado, por lo que el navegador del cliente debe enviar la identificación de su sesión al servidor con cada solicitud. El servidor, a través de cualquier medio, utiliza esta identificación para recuperar cualquier dato de esa sesión y hacer que esté disponible durante la vigencia de la solicitud.

Nick Holt
fuente
0

Sesión en Asp.net:

1. Mantiene los datos en toda la aplicación.

2.Persiste los datos si la sesión actual está activa. Si necesitamos acceder a algunos datos desde varias acciones y vistas de controladores, la sesión es la forma de almacenar y recuperar datos.

3. Las sesiones son archivos del lado del servidor que contienen información del usuario. [Las sesiones son un identificador único que las asigna a usuarios específicos]

Traduciendo eso a los servidores web: el servidor almacenará la información pertinente en el objeto de sesión y creará una ID de sesión que enviará de vuelta al cliente en una cookie. Cuando el cliente devuelve la cookie, el servidor simplemente puede buscar el objeto de sesión utilizando la ID. Entonces, si elimina la cookie, la sesión se perderá.

Vicky
fuente
0

La cookie es una forma de implementar la sesión entre el cliente y el servidor, de esta manera la información de la sesión almacenada en la cookie. Pero esta no es la única forma de mantener la información de la sesión, otra forma es almacenar la información de la sesión en la URL.

menosisawesome
fuente
0

Las cookies se almacenan en el navegador como un formato de archivo de texto. Se almacena la cantidad límite de datos. Solo permite 4kb [4096bytes] . La variable $ _ COOKIE no contendrá múltiples cookies con el mismo nombre

podemos acceder fácilmente a los valores de las cookies, por lo que es menos seguro . La función setcookie () debe aparecer ANTES de

<html> 

etiqueta.

Sesiones se almacenan en el lado del servidor. Se almacena una cantidad ilimitada de datos. Se mantiene la variable múltiple en las sesiones. no podemos acceder fácilmente a los valores de las cookies, por lo que es más seguro .

Enlaces: diferencia entre cookies y sesiones

Elangovan
fuente
Bueno, en realidad puedes guardar múltiples datos en cookies. Además, las sesiones no pueden contener una cantidad ilimitada de datos. Estás bastante limitado por la cantidad de RAM que tienes.
Koray Tugay