Compartir la sesión de PHP entre subdominios

Por defecto las sesiones de PHP son únicas para cada dominio y subdominio. Esto hace que si tenemos información de sesión de un usuario en el dominio example.com, esta información no esté disponible en sub1.example.com, al tratarse de un dominio diferente. Esto mismo nos pasó cuando hicimos la versión móvil de Kukers. Cuando el usuario estaba logueado en la versión clásica (www.kukers.com) y pasaba a la versión móvil (m.kukers.com), se encontraba con que no estaba logueado y tenía que volver a identificarse.

El motivo es que la sesión del servidor está asociada con una cookie en el navegador del usuario en la que se indica el id de la sesión. Cuando se generan las cookies es posible indicar en qué dominios va a estar disponible. Cuando PHP crea una nueva sesión, envía una cookie al navegador del usuario indicándole por defecto que el dominio en el que va a ser válida la cookie (y por tanto la sesión) es el del propio dominio.

Para modificar este comportamiento PHP dispone de la directiva de configuración session.cookie_domain con la que es posible especificar el dominio con el que se creará la cookie de sesión.

Por ejemplo, si quisiéramos compartir la sesión entre el dominio example.com y todos sus subdominios, podríamos por ejemplo hacerlo de la siguiente forma en el archivo php.ini.

session.cookie_domain = ".example.com"

En este caso afectaría a todos los dominios del servidor web, por lo que si el servidor sirve otros dominios diferentes, el lugar más adecuado para configurarlo es dentro de la definición del VirtualHost o en un archivo .htaccess en la raíz del web. En el caso de que cada subdominio tenga un document_root diferente habrá que hacerlo en cada uno de ellos.

php_value session.cookie_domain .example.com

Por último, es posible también hacerlo desde un script en PHP mediante la siguiente sentencia, pero hay que asegurarse de que se haga antes de la llamada a session_start.

ini_set('session.cookie_domain', '.example.com' );
Twitter Digg Delicious Stumbleupon Technorati Facebook Email

2 Respuestas para “Compartir la sesión de PHP entre subdominios”

  1. Excelente, gracias por tu aporte!!!

  2. Muy Buen APORTE! AMIGO! UNO POR LO GENERAL NUNCA TERMINA DE APRENDER.

    EL CODIGO APLICADO FUNCIONA PERFECTO, EN CUANTO A LAS VARIABLES DE SESIÓN GLOBAL!

    TE LO DICE UN PROGRAMADOR AVANZADO Y EXPERIMENTADO TAMBIÉN, QUE LE SERVIÓ TU APORTE!.

    MUCHAS FELICIDADES!

    PD: SOLO UNA CONSULTA MI ESTIMADO!

    CON EL FUNCIONAMIENTO DE ESTE MISMO CODIGO NO DEBERÍA HABER PROBLEMA ALGUNO PARA UN SITIO CON MULTILENGUAJE POR SUBDOMINIOS VERDAD!

    SALUDOS!