Las cookies son un buen mecanismo para dotar de estado al protocolo HTTP. No obstante, presentan ciertos problemas de seguridad como, por ejemplo:
- Las cookies dependen de la configuración del navegador web. Si en la configuración del navegador quitas el soporte para cookies, las cookies que vienen del servidor web ya no se almacenarán en el navegador, se perderán y con ello el servidor ya no podrá mantener el estado de las peticiones.
- En muchos navegadores, el tamaño máximo permitido para una cookie es de 4K. Esto quiere decir que, si la información excede del tamaño permitido, la información no llegará al navegador o la información estará incompleta.
- La información guardada en la cookie es fácilmente modificable en el navegador.
Dados estos problemas, una alternativa más segura es dotar de estado al protocolo HTTP mediante sesiones.
Una sesión es una variable global que es almacenada en forma de fichero de texto dentro de un directorio temporal del servidor web.
A diferencia de las cookies donde el fichero de texto se almacena y “vive” en la memoria del navegador, las sesiones son ficheros de texto que se almacenan o “viven” en el servidor web. A pesar de que tanto cookies y sesiones son creadas por el servidor, los dos mecanismos difieren en el lugar en el que " vive" el fichero de texto.
El concepto de sesiones está basado en el concepto de las cookies, es decir, la sesión termina siendo una cookie, pero con la diferencia de que la sesión utiliza la cookie para almacenar el ID de la sesión, más no guarda en la cookie la información del usuario.
La dinámica del funcionamiento de una sesión es la siguiente:
- El usuario realiza una petición HTTP desde su navegador
- El servidor web recibe la petición y hace lo siguiente:
- Crea una sesión y asigna un ID a la sesión creada (cada sesión tiene un único ID)
- Crea una cookie y en su contenido pone el ID de la sesión creada.
- Envía el mensaje de respuesta HTTP, incluyendo la cookie creada.
- La cookie llega al cliente (navegador) y se guarda en la memoria del cliente.
- La próxima vez que el usuario realiza una nueva petición, la cookie (que contiene el ID de la sesión) viaja en la solicitud dirigida al servidor web.
- El servidor web recibe el mensaje HTTP con la cookie y realiza lo siguiente:
- Consulta la información asociada al ID de sesión guardado en la cookie.
- Relaciona el ID de la sesión con el fichero de texto guardado en el directorio temporal. Así el servidor sabe que la solicitud la está haciendo el mismo usuario del punto 1.
Estoy seguro de que te preguntarás qué pasaría si se quita el soporte de cookies en el navegador. Pues, la sesión lo tiene esto cubierto ya que, si esto llega a suceder, el ID de la sesión es enviado como parámetro de la cadena de consulta de la URI.
Tal vez te estés preguntando ¿cuándo deja de existir una sesión? La respuesta a esta pregunta es que una sesión se termina de manera “automática” cuando suceden una de las dos siguientes opciones:
- Cierras el navegador
- Se ha cumplido con un tiempo predeterminado en el servidor durante el cual ha habido inactividad en el cliente.