una sesiones manejo ejemplos ejemplo crear cookie control con php apache session cookies

manejo - sesiones php login



Permitir que las sesiones de php se transfieran a los subdominios (9)

Uso las sesiones de php (no las cookies, excepto la cookie de identificación de sesión) para todos los datos de usuario, y cuando un usuario va a su perfil user.mydomain.com inmediatamente se "cierra la sesión" hasta que elimina el subdominio.

¿Hay alguna forma de aceptar sesiones de todos los dominios siempre que sea * .midominio.com


Acabo de tener este problema y resulta que estaba usando diferentes archivos php.ini para dos subdominios diferentes. Estos archivos ini especificaron diferentes variables session.save_path . Por razones obvias, esto tiene que ser el mismo para todos los subdominios que necesitan compartir sesiones.


Aquí hay 4 opciones.

Coloque esto en su php.ini:

session.cookie_domain = ".example.com"

O en su .htaccess:

php_value session.cookie_domain .example.com

O como lo primero en tu script:

ini_set(''session.cookie_domain'', ''.example.com'' );

O en su configuración de grupo php-fpm para su sitio:

php_value[session.cookie_domain] = .example.com


Otra opción que funcionó para mí: es forzar el nombre de la sesión:

session_name("myWebsite"); session_start();


Prueba esto:

session_start(); $sessionId = session_id();

Logró el usuario. Cuando el usuario cambie a otro subdominio, se le enviará el ID de sesión en la URL como este user.mydomain.com/?id=$sessionId

$sessionId = $_GET[''id'']; session_start($sessionId);

Ahora el usuario obtendrá todos los valores de la sesión y permanecerá conectado.


Sé que esto es bastante antiguo, pero para ampliar aún más la sugerencia de @ CTT, necesitaba agregar un archivo php.ini en cada subdirectorio (que ejecutará el código php y requiere la sesión) de mi subdominio con el siguiente texto:

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

Espero que esto ayude (me tomó años resolver esto).


cambie el nombre de la sesión en la parte superior del archivo de funciones básicas como

session_name(''mysession'');

luego usa el siguiente código en la página php

session_set_cookie_params(0,"/",".example.com",FALSE,FALSE); setcookie(session_name(), session_id(),0,"/","example.com"); session_start();

finalmente cambie el nombre de sesión predeterminado del subdominio y elimine la cookie predeterminada en el archivo de funciones principales del subdominio como:

/*default session name*/ session_name("mysession"); /*remove the PHPSESSID and default session name from subdomain''s cookie*/ setcookie( "mysession", "",1,"/" ); setcookie( "PHPSESSID", "",1,"/" );

si continúa utilizando su nombre de cookie como PHPSESSID, simplemente elimine todas las funciones con

"mysession" string like session_name(''mysession''), setcookie( "mysession", "",1,"/" );

luego revise las cookies existentes de su navegador, solo elimine todas las cookies de dominio y subdominio, y repita el proceso.


sí. ini_set está funcionando. pero recuerda destruir todos los cachés y cookies del navegador para ver si funciona.

  1. destruir todos los cachés y cookies de tu navegador
  2. en su xxx.example.com y yyy.example.com , sus archivos php deberían comenzar así.

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


if(isset($_COOKIE[''session_id''])) session_id($_COOKIE[''session_id'']); Zend_Session::start(); //or session_start(); if(!isset($_COOKIE[''session_id''])) setcookie(''session_id'', session_id(), 0, ''/'', ''.yourdomain.com'');

seguridad maldita sea, si estás tan frustrado con respuestas incompletas o malas como yo, este es tu salvador. Simplemente funciona.


if(isset($_COOKIE[''session_id''])) session_id($_COOKIE[''session_id'']); Zend_Session::start(); //or session_start(); if(!isset($_COOKIE[''session_id''])) setcookie(''session_id'', session_id(), 0, ''/'', ''.yourdomain.com'');

Esta es una buena solución, pero no puede usarla en todas las situaciones. Por ejemplo, no funcionará cuando no pueda confiar en las cookies que no son de sesión.

Esto realmente DEBE funcionar si lo usa correctamente.

ini_set(''session.cookie_domain'', ''.example.com'' );

Por ejemplo, debe colocarlo antes de session_start() y también en todos los archivos que llaman a session_start()