Estoy intentando configurar lo siguiente:
auth.example.com
sub1.example.com
sub2.example.com
Si el usuario visita sub1.example.com
o sub2.example.com
y no ha iniciado sesión, se le redirige auth.example.com
y puede iniciar sesión.
sub1.example.com
y sub2.example.com
son dos aplicaciones independientes pero utilizan las mismas credenciales.
Intenté configurar lo siguiente en mi php.ini:
session.cookie_domain = ".example.com"
pero no parece estar pasando la información de un dominio a otro.
[Editar]
Intenté lo siguiente:
sub1.example.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.example.com/test.php">Change Sites</a>'
auth.example.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);
Los ID de sesión son exactamente los mismos, pero cuando descargo la $_SESSION
variable, no muestra ambas claves, solo cualquier clave que establezca en cada dominio.
php
authentication
session
cross-domain
dragonmantank
fuente
fuente
Respuestas:
No sé si el problema aún existe, pero me encontré con el mismo problema y lo resolví estableciendo un nombre de sesión antes de llamar
session_set_cookie_params()
:No he cambiado nada en mi,
php.ini
pero ahora todo está funcionando bien.fuente
$some_name = session_name("some_name");
que lo hizo. Gracias y voto a favor.session_name("domain");
era el ingrediente que me faltaba también. Falta la documentación en php.net con respecto a estas configuraciones de sesión. Hay publicaciones de la comunidad en php.net que indican que session.name debe definirse antes de que se puedan aplicar los cambios a session_set_cookie_params ().ini_set("session.cookie_domain", ".domain.com");
causa que esto causaba que creara una nueva identificación de sesión con cada actualización.Una cosa que puede evitar misteriosamente que se lean los datos de la sesión en un subdominio, a pesar de que las cookies estén configuradas correctamente
.example.com
es el parche PHP Suhosin. Puede tener todo configurado correctamente, según los ejemplos de la pregunta, y simplemente no puede funcionar.Desactive la siguiente configuración de sesión de Suhosin y estará de vuelta en el negocio:
fuente
Intente usar:
En vez de:
Tenga en cuenta el período que falta al principio.
Sin embargo, tenga cuidado al usar esto porque no es compatible con todos los navegadores.
fuente
Tenía este problema exacto: quería que los valores de sesión creados en x.example.local estuvieran disponibles en example.local y viceversa.
Todas las soluciones que encontré decían cambiar el dominio de sesión usando
php_value session.cookie_domain .example.local
en .htaccess (o vía php.ini o vía ini_set).El problema fue que estaba configurando
session.cookie_domain
para todos los subdominios (hasta ahora bien) pero también para el dominio principal. Establecer elsession.cookie_domain
dominio principal es aparentemente un no-no.Básicamente la forma en que funcionó para mí:
session.cookie_domain
para TODOS LOS SUBDOMINIOS.Oh, sí, asegúrese de que el dominio tenga un TLD (en mi caso .local). El protocolo HTTP no permite que las cookies / sesiones se almacenen en un dominio sin .tld (es decir, localhost no funcionará, pero stuff.localhost sí lo hará).
EDITAR : También asegúrese de borrar siempre las cookies de su navegador mientras prueba / depura sesiones en subdominios. Si no lo hace, su navegador siempre enviará la cookie de sesión anterior, que probablemente aún no tenga el cookie_domain correcto configurado. El servidor revivirá la sesión anterior y, por lo tanto, obtendrá resultados negativos falsos. (en muchas publicaciones se menciona usar session_name ('cosas') para obtener exactamente el mismo efecto)
fuente
Lo resolví así
Porque estaba trabajando en localhost
no estaba funcionando , ve .localhost como el nivel superior en lugar de .com / .local / ... (sospecho)
fuente
He confirmado. la respuesta de joreon es correcta. No puedo comentar porque mi reputación no es suficiente, así que publico mi comentario aquí.
Defina la constante en un archivo de configuración. Si desea cambiarlo, no es necesario modificar archivos completos.
El nombre de la sesión no puede constar solo de dígitos, debe estar presente al menos una letra. De lo contrario, se genera una nueva identificación de sesión cada vez.
Use el siguiente código para comenzar a usar la sesión
Estoy usando esta función:
fuente
Úselo en cada dominio / subdominio:
La ruta para
session.save_path
puede ser diferente para su caso, pero debería ser la misma en todos los dominios / subdominios. No siempre es cierto por defecto.fuente
Usa esto, funciona:
fuente
Uso combinado de sesiones de cookies de subdominio y dominio raíz
Recurso: http://php.net//manual/tr/function.session-set-cookie-params.php
He probado trabajos
- códigos
fuente
Tengo la idea de que no quieres algo como OpenID, como sugiere Joel, pero quieres tener acceso a los datos de la sesión en varios dominios.
La única posibilidad en la que puedo pensar como solución para ese problema es almacenar los datos de sesión en una base de datos y sacarlos de esa base de datos.
fuente
Tuve un problema similar, sin embargo, esta solución fue buena para mí, quizás ayude a otros en el futuro
editar el php.ini
la magia esta aqui
https://www.sitepoint.com/community/t/sessions-across-subdomains-domain-com-phpsessid-changes/3013/19
fuente
No puedo hablar por otras versiones de PHP, pero en 5.6.6, simplemente establecer el
session.cookie_domain
valor en elphp.ini
archivo hizo el truco para permitir que todos mis subdominios en iPage compartieran el mismo conjunto de variables de sesión.Asegúrese de eliminar cualquier cookie existente relacionada con su dominio de su navegador para probar.
Oh, no sé si hay alguna diferencia, pero también estoy usando el inicio automático de sesión.
fuente
Simplemente intente usar el siguiente código justo encima del
session_start()
métodofuente
He leído todas las respuestas anteriores, creo que mi respuesta es útil para las personas que buscan en Google esto:
asegúrese de que los navegadores envíen la cookie de sesión a los servidores (de dominio y subdominios), configure el dominio de la cookie de sesión como
.example.com
.Asegúrese de que PHP encuentre el "objetivo" correcto para restaurar la variable de sesión:
session_save_path
sea el mismo para todos (lo probé)session_set_save_handler
para hacer eso.fuente
Sé que esto es antiguo, pero funciona bien para mí con varios dominios y subdominios en la misma caja.
?>
fuente
Utilizar :
fuente
Una solución rápida y sucia es usar esto para su redirección:
esto agregará algo similar
?PHPSESSID=etnm7kbuf5lg0r6tv7je6ehtn4
a la URL, que le dice a PHP la identificación de sesión que debe usar.fuente