7.1) ¿Qué son las sesiones en PHP 5?

En este artículo intentaré explicar, de la forma más simple posible, qué son las sesiones en PHP 5, cómo funcionan y cómo las implementa el servidor web. El objetivo de este artículo no es explicar cómo usar sesiones, sino comprender la mecánica del funcionamiento, para entender cómo actúan los ataques contra ellas.

Antecedentes

El protocolo que utiliza la web (HTTP) es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores: no sabe en qué página web estuviste antes ni si ya has enviado datos al sitio web. Lo único que conoce la página web son los datos que le llegan a través de la URL.

Dado que algunas páginas web querían poder reconocer a los visitantes y guardar datos de los mismos de una conexión a otra sin tener que ir arrastrando un montón de parámetros en la URL, se inventaron las ya famosas cookies. Una cookie es un fragmento de información que se guarda en el ordenador del usuario y que está asociado al navegador con el que visitó la página web. Esto quiere decir que cada navegador guarda sus propias cookies y no las comparte con otros navegadores. La forma en la que se guarda esta información depende del navegador, aunque muchos las almacenan como archivos de texto en un directorio dado.

Cuando un navegador va a abrir una página web, si tiene alguna cookie guardada asociada a ese sitio web (en realidad, a ese dominio), coge los datos de la misma y los manda al servidor web junto con la petición de la página.

El sitio web que pone una cookie, también le dice al navegador hasta cuando debe durar (como máximo) la misma: desde “hasta que se cierre el navegador” hasta cualquier cantidad de tiempo. Un dominio sólo puede acceder a las cookies que puso él mismo en el navegador, es decir, un dominio no puede acceder a las cookies de otros dominios.

¿Qué son las sesiones en PHP 5

Resumiendo, las formas que tiene un sitio web para propagar datos sobre un visitante son: la URL o las cookies. El problema con ambos recursos es que son fácilmente modificables por el usuario: la URL se puede cambiar directamente en la barra de direcciones del navegador y las cookies, al ser datos en el ordenador del usuario, también pueden ser modificadas.

Así que, para guardar datos más críticos, se necesitaba un método que no fuera modificable por los usuarios (para evitar que, por ejemplo, un usuario autenticado se hiciera pasar por otro). Así nacieron las sesiones.

Una sesión en PHP 5 es una serie de caracteres aleatorios que forman una identificación única para cada visitante (a la que llamaremos “id de sesión”). Cuando a un usuario se le asigna un id de sesión, el servidor web crea un archivo en su sistema donde irá introduciendo todos los datos que queramos guardar. Pero, ¿cómo reconoce el sitio web al usuario en sucesivas conexiones? Pues usando alguno de los dos métodos anteriores; esto es, haciendo que el usuario le mande en la URL su id de sesión o enviándole una cookie con el mismo y con una duración de “hasta que se cierre el navegador”.

¿Cómo funcionan las sesiones en PHP 5?

Mejor lo explicamos con un ejemplo: acabamos de autenticarnos en una página con nuestro usuario (luis) y contraseña (******). El sitio web comprueba que efectivamente son correctos y quiere poder reconocernos en las siguientes conexiones. Los datos que quiere guardar son: “usuario=luis”. No puede usar para esto la URL ya que entonces, cualquier persona que ponga en la barra de direcciones “usuario=luis” podría acceder a nuestra cuenta. Por la misma razón no puede usar cookies, ya que cualquier usuario sólo tendría que encontrar el archivo de su cookie y modificarla para que ponga “usuario=luis”. Así que lo que le queda son las sesiones.

Mediante PHP el servidor web le asigna a este usuario un id de sesión (por ejemplo: “31d7bgphebfemb55311b1cger6”), crea en su sistema un archivo (en este ejemplo con el nombre “sess_31d7bgphebfemb55311b1cger6”) y mete dentro “usuario=luis”. Como este archivo no está en el ordenador del usuario, sino en el propio servidor, sólo puede ser modificado por el sitio web. Luego, el servidor le manda una cookie al navegador con nombre el nombre de la sesión (por defecto y para este ejemplo “PHPSESSID”) y valor el id de sesión (“31d7bgphebfemb55311b1cger6”).

Así, cuando el usuario vaya a otra página dentro del mismo sitio web, le mandará al servidor el valor de su cookie: “PHPSESSID=31d7bgphebfemb55311b1cger6” (este mismo efecto se puede conseguir utilizando la URL). De esta forma, el servidor sabe que el usuario es el que tiene id de sesión “31d7bgphebfemb55311b1cger6”, así que va a buscar el archivo con sus datos (“sess_31d7bgphebfemb55311b1cger6”) y se los pasa a la página web.

Anterior: 7) Sesiones en PHP 5

 

Siguiente: 7.2) Ejemplo de uso de sesiones en PHP 5

Si tuviste alguna duda no dudes en dejarnos tus comentarios y en breve nuestro staff te apoyará.

Comentarios

Comentarios