Sesiones en múltiples dominios con PHP

Generalmente, trabajamos en nuestros desarrollos con un único dominio, y dependiendo como hagamos nuestra estructura y generación de enlaces en nuestra programación de servidor, seguramente aunque accedamos desde otro dominio, siempre terminemos bajo el principal. No obstante hay situaciones en las que pueden darse casos muy curiosos y puede que no nos venga mal este tip.

Si no trabajas con sesiones que almacenan el session ID en cookies, entonces este tip no te afecta demasiado. Esto es así porque cuando se trabaja de esta forma, las cookies que se guardan son dependientes del dominio por motivos de seguridad, con lo que te protegen de lecturas externas, pero también entorpecen a veces procesos internos (por defecto cualquier subdominio (www, blog, …) se considera diferente dominio que el base).

Imaginemos que tu web está bajo el dominio midominio.com, has de saber que estarías afectado por diferentes dominios si el usuario a www.midominio.com o si accede a midominio.com. Si siempre empleas rutas relativas, respetarás el dominio con el que accedió el usuario, pero como decimos hay ocasiones en las que existen enlaces absolutos, que podrían crear el efecto de estar bajo dos dominios diferentes. Lo mismo ocurriría si trabajas sobre subodminios tipo blog.midominio.com, etc.

Para solventarlo y poder trabajar bajo diferentes dominios compartiendo la sesión, tenemos que modificar el session.cookie_domain, mediante el método session_set_cookie_params, concretamente analiza lo que indica en el parámetro «domain» de la ayuda. Esto se ha de llamar en cada petición, antes del session_start().

Sin embargo, personalmente encontramos más rápido, eficaz y directo modificar el .htaccess (que también lo permite) mediante un comando similar a este:

php_value session.cookie_domain ".midominio.com"

Este fichero ha de estar en los directorios que representen los subdominios correspondientes, de manera que las sesiones en ese subdominio, serán compartidas con cualquier subdominio del tipo xxx.midominio.com

Y finalmente… si tu problema es https… entonces te recomiendo pegarle un ojo a session.cookie_secure :)