Configurar wildcard domains con $_SESSION en PHP
Muchos os habréis fijado que en algunos servicios web se usan subdominios dinámicos (Wildcard) para las cuentas de sus usuarios. Sin embargo, una vez configurados los subdominios dinámicos, tenemos un serio problema y es que, las variables de sesión por defecto se pierden cada vez que ejecutamos la aplicación web desde un subdominio distinto al que hemos utilizado para crear dicha variable de sesión. Es por ello que debemos configurar wildcard domains.
Podemos comprobar esto en algunos sitios web que no usan subdominios dinámicos, pero, si hacemos login en su www.dirección.com, si después vamos a su dirección.com sin las ‘www’ nos encontramos con que no hemos iniciado sesión. El problema es similar y tiene la misma solución que en el caso de los Wildcard domains.
Configurar Wildcard Domains
Vamos a explicar cómo solucionar este problema y cómo hacer funcionar subdominios dinámicos. Los pasos:
1 – Configurar el DNS.
2 – Configurar el servidor web.
3 – Configurar bien el ámbito de las variables $_SESSION en la aplicación PHP para que se compartan las variables de sesión entre los subdominios.
Configurar el DNS
Basta con crear una entrada tipo host es decir, «A» apuntando a *.tudominio.com. También vale con crear un CNAME * apuntando al registro A del dominio principal («tudominio.com»).
Si hacemos un ping a «loquesea.tudomino.com» debería ya resolver (a menos que tengas capado el tráfico ICMP claro).
Configurar el servidor web
Apache HTTPD debemos configurar en el vhost de nuestro dominio un ServerAlias que atienda a «*.midominio.com».
Nginx: hay que configurar en la sección Server un valor server_name como «*.midominio.com».
IIS: debemos dejar un sitio virtual sin headers y ese es el que atenderá las peticiones de vuestro wildcard DNS, es la única forma.
Se ha discutido sobre este tema en el foro oficial de IIS y según los propios desarrolladores, aunque ha sido demandada durante años, no se piensa implementar dicha funcionalidad por ahora, ni siquiera en IIS7.
Nota: solo podemos disponer de un sitio web sin headers por servidor web IIS.
Configurar nuestras variables de $_SESSION en PHP
El truco está en configurar la directiva session.cookie_domain como «.midominio.com» (importante el . delante del dominio).
Podéis hacerlo en tiempo de ejecución, antes de llamar a session_start(); siempre que tengamos deshabilitado el autoarranque de sesiones en el php.ini (como es lógico y viene por defecto)
ini_set("session.cookie_domain",".midominio.com"); session_start();
¿Usas Plesk?
Aquí te explicamos cómo configurar wildcard domains en servidores con el panel de control Plesk.