Mantenimiento de variables de sesión en subdominios

He estado intentando mantener los valores de sesión entre dos subdominios y me pareció imposible. Terminé creando 2 páginas web PHP mínimas como banco de pruebas, uno que llamo ‘prueba 1’ solo establece

$_SESSION['test'] = "Fred"; 

y tiene un hipervínculo a ‘prueba 2’ que simplemente intenta hacerse eco del valor de $ _SESSION [‘test’] para probar que funcionó, o no. Pongo ‘prueba 1’ en mi dominio www y ‘prueba 2’ en mi subdominio. Intento varias versiones de lo que debería ir en el encabezado, de varias fonts. Aquí están los 3 principales (y por supuesto sus variantes):

 ini_set('session.cookie_domain',substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); session_start(); 

o

 ini_set('session.cookie_domain','mydomain.com'); session_start(); 

o

 ini_set('session.cookie_domain', PHP_INI_ALL); session_start(); 

o

 session_set_cookie_params(0, "/", ".mydomain.com", false); session_start(); 

Encuentro que obtengo un resultado idéntico en todos los casos. La sesión no se transmite a través de los subdominios y la prueba de página 2 no tiene idea de a qué valor configuré $ _SESSION [‘test’]. Sin embargo, parece que hay mucha certeza en torno a la red de que uno de los métodos anteriores debería funcionar. ¿Alguna idea de lo que podría estar pasando, sobre todo porque estoy usando páginas mínimas para probar el mecanismo (sin efectos secundarios que puedo ver)? Por cierto, estoy en un servidor compartido, si es pertinente aquí.

Gracias por tus pensamientos. Franco.

Editar . Lo arreglé. El problema fue causado por Suhosin. Ver respuesta detallada al pie de esta página.

Ok, lo clavé y fue apestoso.

La opción suhosin.session.cryptdocroot de Suhosin fue la causa completa del problema. Cuando la clave de cifrado de la sesión se basa en DocRoot, hace que los subdominios no puedan ver las variables de sesión de los demás cuando el dominio base y los subdominios se sirven desde directorios diferentes. Esto lleva a los valores de sesión en el servidor almacenados en diferentes carpetas y, por lo tanto, no son visibles para cada uno de los dominios correspondientes.

Solución. Simplemente agregue estas 2 líneas en su archivo php.ini:

 suhosin.session.cryptdocroot=Off suhosin.cookie.cryptdocroot=Off 

Una pesadilla de 48 horas para localizar, 4.8 segundos para arreglar.

Lo tengo funcionando, estableciendo un nombre de sesión y parámetros de cookie de sesión:

 $some_name = session_name("some_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();