77 votes

Autoriser les sessions php à se reporter aux sous-domaines

J'utilise des sessions php (pas des 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

96voto

CTT Points 7235

Voici 3 options.

Placez ceci dans votre php.ini:

 session.cookie_domain = ".example.com"
 

Dans votre .htaccess:

 php_value session.cookie_domain .example.com
 

En tant que première chose dans votre script:

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

13voto

sucitivel Points 371
         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 damnée, si vous êtes aussi frustré que moi par des réponses incomplètes ou mauvaises, ceci est votre sauveur. Ça fonctionne.

4voto

joeldixon66 Points 782

Je sais que c'est assez vieux - 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écessitera 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 beaucoup de temps pour comprendre cela).

4voto

Une autre option qui a fonctionné pour moi est de forcer le nom de la session:

 session_name("myWebsite");
session_start(); 
 

-3voto

user1966103 Points 1
 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');
 

C'est une bonne solution, mais vous ne pouvez pas l'utiliser dans toutes les situations. Par exemple, cela ne fonctionnera pas si vous ne pouvez pas compter sur des cookies de non-session.

Cela DOIT réellement fonctionner si vous l'utilisez correctement. ini_set ('session.cookie_domain', '.example.com');

Par exemple, vous devez le mettre avant session_start () et également dans tous les fichiers qui appellent session_start ()

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