J'utilise des sessions php (pas les cookies, à l'exception du cookie d'identification de session) pour toutes les données utilisateur. Lorsqu'un utilisateur accède à son profil user.mydomain.com, il est immédiatement "déconnecté" jusqu'à ce qu'il supprime le sous-domaine.
Existe-t-il un moyen d’accepter des sessions de tous les domaines aussi longtemps que son * .mydomain.com
Voici 4 options.
Placez ceci dans votre php.ini:
session.cookie_domain = ".example.com"
Ou dans votre .htaccess:
php_value session.cookie_domain .example.com
Ou comme la première chose dans votre script:
ini_set('session.cookie_domain', '.example.com' );
Ou dans la configuration de votre pool php-fpm pour votre site:
php_value[session.cookie_domain] = .example.com
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');
que la sécurité soit maudite, si vous êtes aussi frustré que moi par des réponses incomplètes ou mauvaises, ceci est votre sauveur. Ça fonctionne.
change le nom de la session en haut du fichier des fonctions principaleslike
session_name('mysession');
puis utilisez le code suivant dans la page php
session_set_cookie_params(0,"/",".example.com",FALSE,FALSE);
setcookie(session_name(), session_id(),0,"/","example.com");
session_start();
enfin, modifiez le nom de session par défaut du sous-domaine et supprimez le cookie par défaut dans le fichier de fonctions de base du sous-domainelike:
/*default session name*/
session_name("mysession");
/*remove the PHPSESSID and default session name from subdomain's cookie*/
setcookie( "mysession", "",1,"/" );
setcookie( "PHPSESSID", "",1,"/" );
si vous continuez à utiliser votre nom de cookie en tant que PHPSESSID, supprimez toutes les fonctions avec
"mysession" string like session_name('mysession'), setcookie( "mysession", "",1,"/" );
puis vérifiez les cookies existants de votre navigateur, supprimez simplement tous les cookies du domaine et du sous-domaine, et répétez le processus.
Je sais que c'est assez ancien - mais pour développer la suggestion de @ CTT - j'avais besoin d'ajouter un fichier php.ini dans chaque sous-répertoire (qui exécutera du code php et nécessite la session) de mon sous-domaine avec le texte suivant:
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
J'espère que cela aide (il m'a fallu des siècles pour comprendre cela).
oui. ini_set
fonctionne. mais rappelez-vous de détruire tous les caches et les cookies du navigateur pour voir son fonctionnement.
dans votre xxx.example.com
et yyy.example.com
, vos fichiers php devraient commencer comme ceci.
ini_set('session.cookie_domain', '.example.com' ); session_start();
Une autre option qui a fonctionné pour moi est de forcer le nom de la session:
session_name("myWebsite");
session_start();
Je viens d'avoir ce problème et il s'avère que j'utilisais différents fichiers php.ini pour deux sous-domaines différents. Ces fichiers ini spécifiaient différents session.save_path variables. Pour des raisons évidentes, il doit être identique pour tous les sous-domaines devant partager des sessions.
Essaye ça:
session_start();
$sessionId = session_id();
connecté l'utilisateur. Lorsque l’utilisateur passera à un autre sous-domaine, l’identifiant de session dans l’URL sera le même que celui-ci user.mydomain.com/?id=$sessionId
$sessionId = $_GET['id'];
session_start($sessionId);
Maintenant, l'utilisateur obtiendra toutes les valeurs de la session et restera connecté.