J'essaye de configurer les éléments suivants:
auth.example.com
sub1.example.com
sub2.example.com
Si l'utilisateur visite sub1.example.com
ou sub2.example.com
et qu'il n'est pas connecté, il est redirigé vers auth.example.com
et peut se connecter.
sub1.example.com
et sub2.example.com
sont deux applications distinctes mais utilisent les mêmes informations d'identification.
J'ai essayé de définir ce qui suit dans mon php.ini:
session.cookie_domain = ".example.com"
mais il ne semble pas transmettre les informations d'un domaine à l'autre.
[Éditer]
J'ai essayé ce qui suit:
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);
Les identifiants de session sont exactement les mêmes, mais lorsque je vide la $_SESSION
variable, les deux clés ne sont pas affichées, quelle que soit la clé que j'ai définie sous chaque domaine.
php
authentication
session
cross-domain
dragonmantank
la source
la source
Réponses:
Je ne sais pas si le problème existe toujours, mais je viens de rencontrer 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()
:Je n'ai rien changé à mon
php.ini
mais maintenant tout fonctionne bien.la source
$some_name = session_name("some_name");
qui l'a fait. Merci et vote favorable.session_name("domain");
était aussi l'ingrédient manquant pour moi. La documentation sur php.net concernant ces paramètres de session fait défaut. Il y a des messages de la communauté sur php.net qui indiquent que session.name doit être défini avant que les modifications apportées à session_set_cookie_params () puissent être appliquées.ini_set("session.cookie_domain", ".domain.com");
cause qui l'a amené à créer un nouvel identifiant de session à chaque actualisation.Une chose qui peut mystérieusement empêcher la lecture des données de session sur un sous-domaine, bien que les cookies soient correctement définis sur
.example.com
est le patch PHP Suhosin. Vous pouvez avoir tout configuré correctement, selon les exemples de la question, et cela ne peut tout simplement pas fonctionner.Désactivez les paramètres de session Suhosin suivants et vous êtes de retour dans les affaires:
la source
Essayez d'utiliser:
Au lieu de:
Notez la période manquante au début.
Soyez prudent lorsque vous utilisez ceci, car il n'est pas pris en charge par tous les navigateurs.
la source
Eu ce problème exact - je voulais que les valeurs de session créées sur x.example.local soient disponibles sur example.local et vice-versa.
Toutes les solutions que j'ai trouvées indiquaient de changer le domaine de session en utilisant
php_value session.cookie_domain .example.local
dans .htaccess (ou via php.ini ou via ini_set).Le hic était que je définissais le
session.cookie_domain
pour tous les sous-domaines (jusqu'ici ok) mais aussi pour le domaine principal. Définir lesession.cookie_domain
sur le domaine principal est apparemment un non-non.Fondamentalement, la façon dont cela a fonctionné pour moi:
session.cookie_domain
pour TOUS LES SOUS-DOMAINES.Oh oui, veuillez vous assurer que le domaine a un TLD (dans mon cas .local). Le protocole HTTP n'autorise pas le stockage des cookies / sessions sur un domaine sans .tld (c'est-à-dire que localhost ne fonctionnera pas, mais stuff.localhost le fera).
MODIFIER : assurez-vous également de toujours effacer les cookies de votre navigateur lors du test / débogage des sessions sur les sous-domaines. Si vous ne le faites pas, votre navigateur enverra toujours l'ancien cookie de session qui n'a probablement pas encore défini le cookie_domaine correct. Le serveur relancera l'ancienne session et vous obtiendrez donc de faux résultats négatifs. (dans de nombreux articles, il est mentionné d'utiliser session_name ('stuff') pour exactement le même effet)
la source
Je l'ai résolu comme ça
Parce que je travaillais sur localhost
ne fonctionnait pas , il voit .localhost comme le niveau supérieur au lieu de .com / .local / ... (je suppose)
la source
J'ai confirmé. La réponse de joreon est correcte. Je ne peux pas commenter car ma réputation ne suffit pas alors je poste mon commentaire ici.
Définissez la constante dans un fichier de configuration. Si vous souhaitez le changer, pas besoin de modifier des fichiers entiers.
Le nom de session ne peut pas être composé uniquement de chiffres, au moins une lettre doit être présente. Sinon, un nouvel identifiant de session est généré à chaque fois.
Utilisez le code suivant pour commencer à utiliser session
J'utilise cette fonction:
la source
Utilisez-le sur chaque domaine / sous-domaine:
Le chemin pour
session.save_path
peut être différent pour votre cas, mais il doit être le même sur chaque domaine / sous-domaine. Ce n'est pas toujours vrai par défaut.la source
Utilisez ceci, cela fonctionne:
la source
Utilisation combinée de sessions de cookies de sous-domaine et de domaine racine
Ressource: http://php.net//manual/tr/function.session-set-cookie-params.php
J'ai testé des oeuvres
-- Codes
la source
J'ai l'idée que vous ne voulez pas quelque chose comme OpenID, comme le suggère Joel, mais que vous voulez avoir accès aux données de session sur plusieurs domaines.
La seule possibilité que je puisse considérer comme une solution à ce problème est de stocker les données de session dans une base de données et de les extraire de cette base de données.
la source
J'ai eu un problème similaire, cependant, cette solution était bonne pour moi, aidera peut-être les autres à l'avenir
modifier le php.ini
la magie est là
https://www.sitepoint.com/community/t/sessions-across-subdomains-domain-com-phpsessid-changes/3013/19
la source
Je ne peux pas parler pour d'autres versions de PHP, mais en 5.6.6, le simple fait de définir la
session.cookie_domain
valeur dans lephp.ini
fichier a fait l'affaire pour permettre à tous mes sous-domaines sur iPage de partager le même ensemble de variables de session.Assurez-vous de supprimer tous les cookies existants liés à votre domaine de votre navigateur pour tester.
Oh, je ne sais pas si cela fait une différence, mais j'utilise également le démarrage automatique de session.
la source
Essayez simplement d'utiliser le code suivant juste au-dessus de la
session_start()
méthodela source
J'ai lu toutes les réponses ci-dessus, je pense que ma réponse est utile pour les personnes qui recherchent ceci:
assurez-vous que les navigateurs renvoient le cookie de session aux serveurs (du domaine et des sous-domaines), définissez le domaine du cookie de session sur
.example.com
.Assurez-vous que PHP trouve la bonne "cible" pour restaurer la variable de session:
session_save_path
c'est le même pour tous (j'ai testé)session_set_save_handler
pour faire ça.la source
Je sais que c'est vieux mais cela fonctionne très bien pour moi avec plusieurs domaines et sous-domaines sur la même boîte.
?>
la source
Utilisation :
la source
Une solution rapide et sale consiste à utiliser ceci pour votre redirection:
cela ajoutera quelque chose comme
?PHPSESSID=etnm7kbuf5lg0r6tv7je6ehtn4
à l'URL, qui indiquera à PHP l'ID de session qu'il doit utiliser.la source