OVH Cloud OVH Cloud

probleme de sessions apres changement de domaine

8 réponses
Avatar
gniagnia
Bonjour à tous,

Voila j'ai developpé un site (supposons www.toto.fr) avec un mecanisme
d'authentification par sessions PHP (pas de cookies).

Tout marchait nikel jusqu'a ce que je migre la totalité du site dans
un sous domaine ; la nouvelle adresse du site devenant :
www.toto.tata.fr
J'ai activé avec succès la redirection de www.toto.fr vers
www.toto.tata.fr.

Cependant la gestion des sessions php ne fonctionne plus si je me
connecte directement à l'url www.toto.fr.
Seule la connexion explicite à l'adresse www.toto.tata.fr permet le
bon fonctionnement du mécanisme de sessions PHP.

Quelqu'un pourrait il m'expliquer la raison de ce probleme? et
accessoirement me donner une piste pour le résoudre?

Un grand merci d'avance.

8 réponses

Avatar
Denis Beauregard
Le 10 Nov 2005 21:08:30 GMT, écrivait dans
fr.comp.lang.php:

Bonjour à tous,

Voila j'ai developpé un site (supposons www.toto.fr) avec un mecanisme
d'authentification par sessions PHP (pas de cookies).

Tout marchait nikel jusqu'a ce que je migre la totalité du site dans
un sous domaine ; la nouvelle adresse du site devenant :
www.toto.tata.fr
J'ai activé avec succès la redirection de www.toto.fr vers
www.toto.tata.fr.

Cependant la gestion des sessions php ne fonctionne plus si je me
connecte directement à l'url www.toto.fr.
Seule la connexion explicite à l'adresse www.toto.tata.fr permet le
bon fonctionnement du mécanisme de sessions PHP.

Quelqu'un pourrait il m'expliquer la raison de ce probleme? et
accessoirement me donner une piste pour le résoudre?


Pour une fois que je peux aider ;-)

La session est gérée par un cookie. Ce cookie est défini pour un
domaine bien précis. Donc, si on lance la session depuis un autre
sous-domaine, le cookie ne passe plus et la session se perd.

Solution: ne pas utiliser de cookie pour lancer la session si on la
lance depuis un autre domaine.


Denis

Avatar
gniagnia
Merci Denis pour ta réponse.

Mais j'ai mal du me faire comprendre : le site php que je developpe ne
gere PAS de cookies.
J'active simplement une session simple via la fonction
'session_register' lorsque le processus de login est OK (user +
password corrects).

Merci pour ton aide.
Avatar
bretz
wrote:
Bonjour à tous,

Voila j'ai developpé un site (supposons www.toto.fr) avec un mecanisme
d'authentification par sessions PHP (pas de cookies).

Tout marchait nikel jusqu'a ce que je migre la totalité du site dans
un sous domaine ; la nouvelle adresse du site devenant :
www.toto.tata.fr
J'ai activé avec succès la redirection de www.toto.fr vers
www.toto.tata.fr.

Cependant la gestion des sessions php ne fonctionne plus si je me
connecte directement à l'url www.toto.fr.
Seule la connexion explicite à l'adresse www.toto.tata.fr permet le
bon fonctionnement du mécanisme de sessions PHP.

Quelqu'un pourrait il m'expliquer la raison de ce probleme? et
accessoirement me donner une piste pour le résoudre?

Un grand merci d'avance.
Bonjour,

je chercherais du coté du niveau du php et/ou du paramètre
register_globals.
si register_globals est à OFF (gage de sécurité) session_ devient obsolète
et remplacé par $_SESSION.
il y aurait lieu dans ce cas d'utiliser les fonctions et les variables en
$_SESSION exclusivement.
j'espère que cela pourra aider.
bretz

Avatar
Denis Beauregard
Le 11 Nov 2005 11:03:22 GMT, écrivait dans
fr.comp.lang.php:

Merci Denis pour ta réponse.

Mais j'ai mal du me faire comprendre : le site php que je developpe ne
gere PAS de cookies.
J'active simplement une session simple via la fonction
'session_register' lorsque le processus de login est OK (user +
password corrects).


Tu passe comment le SID (Session ID) ? Par défaut, il passe par
les cookies. Voir la doc sur http://ca3.php.net/session


Denis

Avatar
FightClub!
Merci Denis pour ta réponse.

Mais j'ai mal du me faire comprendre : le site php que je developpe ne
gere PAS de cookies.
J'active simplement une session simple via la fonction
'session_register' lorsque le processus de login est OK (user +
password corrects).


Chez la majorité des hébergeurs, les sessions PHP sont justement gérée
par, entre autre, un cookie... de session. Donc tu t'es bien fait
comprendre mais je te conseille de lire ça :
http://fr.php.net/manual/fr/ref.session.php

ensuite si effectivement ton hébergement génére un cookie pour les
sessions et que tu souhaites conserver ta session d'un (sous)domaine à
l'autre, il faudra que tu passes PHPSESSID dans *tous* les liens qui
permettent d'aller d'un (sous)domaine à l'autre.


Merci pour ton aide.


Avatar
Frederic Rouchouze
Mais j'ai mal du me faire comprendre : le site php que je developpe ne
gere PAS de cookies.
J'active simplement une session simple via la fonction
'session_register' lorsque le processus de login est OK (user +
password corrects).


Selon le paramétrage de PHP, les fonctions 'session_*' de PHP utilisent
(parfois) des cookies ! Même si tu ne le fais pas explicitement...
--
Frédéric Rouchouze
mailto:

Avatar
Raphael Wils
Merci Denis pour ta réponse.

Mais j'ai mal du me faire comprendre : le site php que je developpe ne
gere PAS de cookies.
J'active simplement une session simple via la fonction
'session_register' lorsque le processus de login est OK (user +
password corrects).

Merci pour ton aide.


oui mais l'identifiant de la session est stocké soit dans un cookie soit
dans l'url...

--
Raphaël
http://www.r-wils.com
« Don't mean a thing if you ain't got that swing ! »

Avatar
gniagnia
Merci pour votre aide.

J'ai lu la doc sur les sessions et je comprend mieux le probleme.
Mais je n'arrive toujours pas a le resoudre, je m'explique :

Un user se logue sur www.toto.fr/login.php (l'url veritable etant
www.toto.tata.fr/login.php) et appel la page verif.php qui verifie que
le user existe dans la base. Si c'est le cas, le code suivant est
executé :


session_start();
session_register('id_membre');
session_register('email_membre');
session_register('login');
session_register('level');
session_register('nom');
session_register('prenom');

$_SESSION['login'] = $login;
$_SESSION['id_membre'] = $id_membre;
$_SESSION['email_membre'] = $email_membre;
$_SESSION['level'] = $level;
$_SESSION['nom'] = $nom;
$_SESSION['prenom'] = $prenom;
header("Location:index_membre.php");


Et c'est à partir de la que le probleme survient. Voici le code de la
page index_membre.php :



<?
session_start();


if(isset($_SESSION['id_membre']))
{
$login=$_SESSION['login'];
$id_membre=$_SESSION['id_membre'];
$level=$_SESSION['level'];
$nom=$_SESSION['nom'];
$prenom=$_SESSION['prenom'];
}

if (!session_is_registered("id_membre"))
{
echo "<br><br>Erreur vous devez etre identifié !";
echo "<br>";
echo "<a href=login.php>Voulez vous vous loguer?!</a><br>";
exit();
}
else
{


// Le user est logué et j'affiche ici les infos le concernant dans la
base



}

mysql_close($db_link);
?>




J'obtient l'erreur "Erreur vous devez etre identifié ! etc..." => les
variables de sessions n'ont pas été transmises.

Ou et comment dois je modifier le code php pour que les variables de
sessions soient transmises jusqu'à la page index_membre.php ? ? ?



Merci !