2010-05-14 4 views
1

J'ai lu de nombreux forums (y compris celui-ci) sur la transmission de variables de session entre sous-domaines, et je n'arrive pas à le faire fonctionner. Quelqu'un peut-il expliquer ce que je manque?Session PHP partagée avec le sous-domaine

Étape 1 Dans le fichier php.ini: session.cookie_domain = ".mydomain.com" Vérifié avec phpinfo() que j'utilise le fichier php.ini droit

Étape 2 En page à la www.mydomain.com définit une variable de session $ _SESSION ['a'], vérifie qu'elle apparaît en l'appelant sur la page suivante (c'est le cas). lien Clink pour sub.mydomain.com

Étape 3 page lors des contrôles sub.mydomain.com si la variable de session est définie à l'aide:

$ a = $ _SESSION [ 'a']; if (! Isset ($ _ SESSION ['a'])) { echo "Erreur: Variable de session non disponible"; }

Malheureusement, je reçois mon message d'erreur. Qu'est-ce que je rate? Merci d'avance pour votre aide.

+0

Avez-vous vérifié que phpinfo() lorsqu'il est exécuté sur le sous-domaine affiche également le paramètre cookie_domain correct? – webbiedave

Répondre

2

débogage.
est la chose qui vous manque. Tout d'abord, vous devez regarder les en-têtes HTTP pour voir ce qui se passe et quels sont les cookies en cours de définition. Vous pouvez utiliser l'addon Firefox LiveHTTPHeaders ou quelque chose. Avec ces informations, vous pouvez trouver le problème. Sans cela, personne ne peut répondre à la question de tournée "mes sessions ne fonctionnent pas"

Il peut prouver votre déclaration de domaine correct dans les paramètres de session. Ou réfutez-le.
Il peut révéler d'autres erreurs de configuration.
Il peut vous montrer cookie d'être renvoyé par le navigateur - donc vous pouvez être sûr que est le problème côté serveur

Pour voir le résultat réel de votre code (au lieu de prendre en fonction des conséquences indirectes) aide toujours .

+0

Merci, j'ai chargé le LiveHTTPHeaders et je vois cette entrée sous le POST ... Cookie: PHPSESSID 870bfb ... etc Donc il passe le sessionid à la page suivante, correct? J'ai utilisé une méthode différente ci-dessous et cela fonctionne. Je ne suis pas sûr de ce qu'il faut rechercher dans l'en-tête de mon autre solution. – Ian

3

Alors, je suis allé une autre direction et utilisé cette entrée qui a travaillé ...

session_set_cookie_params (0, '/', '.mydomain.com'); session_start();

3

Vous devez passer l'identifiant de session comme un cookie et défini le même identifiant de session sur le nouveau domaine

Par exemple, vous pouvez utiliser ce code

ini_set('session.cookie_domain', '.example.com'); 
$currentCookieParams = session_get_cookie_params(); 

$rootDomain = '.example.com'; 
session_set_cookie_params( 
    $currentCookieParams["lifetime"], 
    $currentCookieParams["path"], 
    $rootDomain, 
    $currentCookieParams["secure"], 
    $currentCookieParams["httponly"] 
); 

if(!empty($_SESSION)){ 
    $cookieName = session_id(); 
    setcookie('PHPSESSID', $cookieName, time() + 3600, '/', $rootDomain); 

} 

if(isset($_COOKIE['PHPSESSID'])){ 
    session_name($_COOKIE['PHPSESSID']); 
}