95 votes

Sessions PHP entre sous-domaines

Je suis en train de mettre en place les éléments suivants:

auth.domain.com
sub1.domain.com
sub2.domain.com

où si l'utilisateur visite sub1.domain.com ou sub2.domain.com et ils ne sont pas connectés, ils sont poussés à auth.domain.com et vous pouvez vous. sub1.domain.com et sub2.domain.com sont deux applications distinctes, mais d'utiliser les mêmes informations d'identification.

J'ai essayé le réglage de la suite dans mon php.ini:

session.cookie_domain = ".domain.com"

mais il ne semble pas être de transmettre les informations d'un domaine à l'autre.

[Modifier]

J'ai essayé le suivant:

sub1.domain.com/test.php

session_set_cookie_params(0, '/', '.domain.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.domain.com/test.php">Change Sites</a>'

auth.domain.com/test.php

session_set_cookie_params(0, '/', '.domain.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);

Les Identifiants de session sont exactement les mêmes mais quand j'ai vider les $_SESSION variable qu'il ne montre pas les deux touches, juste ce que touche, j'définir le cadre de chaque domaine.

[Edit 2]

J'ai mis à jour [Modifier]

141voto

jeroen Points 47068

Je ne sais pas si le problème persiste, mais j’ai rencontré le même problème et je l’ai résolu en définissant un nom de session avant d’appeler session_set_cookie_params ():

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

Je n'ai rien changé dans mon php.ini mais maintenant tout fonctionne bien.

24voto

drewm Points 1046

Le correctif PHP Suhosin est une chose qui peut mystérieusement empêcher la lecture des données de session sur un sous-domaine, même si les cookies sont correctement configurés sur .domain.com . Tout peut être configuré correctement, conformément aux exemples de la question, et cela peut tout simplement ne pas fonctionner.

Désactivez les paramètres de session Suhosin suivants et vous serez de retour dans les affaires:

 suhosin.session.cryptua = Off 
suhosin.session.cryptdocroot = Off
 

5voto

George Claghorn Points 6665

Essayez d'utiliser:

 session.cookie_domain = "domain.com"
 

Au lieu de:

 session.cookie_domain = ".domain.com"
 

Notez la période manquante.

Soyez prudent en utilisant ceci, car il n'est pas supporté par tous les navigateurs.

3voto

sldev Points 858

Je l'ai résolu comme ça

 ini_set('session.cookie_domain', '.testdomain.dev');
session_start();
 

Parce que je travaillais sur localhost

 ini_set('session.cookie_domain', '.localhost');
 

ne fonctionnait pas , il voit .localhost comme le toplevel au lieu de .com / .local / ... (je soupçonne)

J'ai aussi utilisé .dev parce que travailler sur OS X ne semble pas résoudre le .com en tant que premier dans HOSTS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X