Sessions PHP et sous domaines

Le
poubelleaspam
Bonjour,

Je souhaite mettre en place un système centralisé d'authentification
pour un intranet comportant des sous sites.
J'utilise le serveur web Apache (1.3.29) et le module PHP (4.2.3) sous
Linux.
J'utilise les sessions PHP par cookies.

Admettons que mon domaine soit toto.fr. Je souhaite que la session
utilisateur soit valable sur toto.fr, sur titi.toto.fr, sur
tutu.toto.fr, etc.

Malheureusement, mes cookies ne marchent que sur toto.fr.
J'ai essayé de jouer avec la fonction session_set_cookie_params() mais
sans succès.

Existe-t-il une solution à mon problème ?

Merci d'avance,
Aurélien Girard
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Daspet
Le #586834
Aur?lien Girard wrote:
Je souhaite mettre en place un système centralisé d'authentification
pour un intranet comportant des sous sites.

Existe-t-il une solution à mon problème ?


Plusieurs, aucune réellement satisfaisante. Je peux t'en proposer une
(je ne met que les grandes lignes, l'implémentations est probablement à
modifier). Je pars aussi du postulat que tous tes sites sont sur le même
disque et partagent le même répertoire de stockage pour les sessions)


Sur un site qui servira de point central pour les sessions :

A -- une page qui teste la présence d'un identifiant de session. Elle
prend en paramère une URL et regarde si le visiteur en cours a une
session. Si c'est le cas elle le redirige vers l'URL reçue(*) en
rajoutant l'identifiant de session en paramètre, sinon elle rajoute un
paramètre pour symboliser le fait qu'il n'y a pas de session en cours.

B -- une page à qui on envoie login+password + une URL. Si
l'authentification est réussie, elle créé la session et redirige vers
l'URL reçue(*) avec l'identifiant de session en paramètre, sinon elle
rajoute un paramètre pour symboliser le fait que l'authentification a foiré.


Maintenant sur n'importe lequel de tes sites, quand tu as besoin de
vérifier l'authentification :

- ta page C n'est accessible que pour les admins et l'utilisateur n'a
pas de session authentifiée en cours. Tu redirige vers A avec l'URL de C
en paramètre. A va vérifier la présence de session sur le point central,
et te rediriger vers C, avec la session en paramètre. Tu n'as plus qu'à
relire cette session en C, mettre l'identifiant dans un cookie et
continuer le reste comme si la session était locale.


Imaginons que la personne n'était pas authentifiée :

- C a renvoyé vers A, qui a renvoyé à son tour vers C. On n'a pas de
session, on affiche donc le formulaire de login classique. Ce formulaire
doit pointer vers B.
Il ne restera plus qu'à récupérer le résultat de B dans une page, soit
pour redemander le login, soit pour mettre l'identifiant de session recu
en cookie et continuer normalement avec la personne authentifiée.



(* : pour éviter une faille de sécurité monstrueuse il faut penser à
vérifier que l'URL cible est bien vers un de tes sites et pas vers un
site externe)
--
Eric Daspet
Venez aider notre mangeur de cigogne sur http://mangeur-de-cigogne.info/

Mat Free
Le #586835
dans
Bonjour,

Je souhaite mettre en place un système centralisé d'authentification
pour un intranet comportant des sous sites.
J'utilise le serveur web Apache (1.3.29) et le module PHP (4.2.3) sous
Linux.
J'utilise les sessions PHP par cookies.

Admettons que mon domaine soit toto.fr. Je souhaite que la session
utilisateur soit valable sur toto.fr, sur titi.toto.fr, sur
tutu.toto.fr, etc.

Malheureusement, mes cookies ne marchent que sur toto.fr.
J'ai essayé de jouer avec la fonction session_set_cookie_params() mais
sans succès.

Existe-t-il une solution à mon problème ?


Je crois pas que ce problème puisse être contourner
sans modifier la politique de gestion des cookies
du navigateur clients, qui, je crois, par défaut
accepte seulement les cookies émanant du domaine
sur lequel on est connecté.

--
Mat

Canard Furieux
Le #586632
Je souhaite mettre en place un système centralisé d'authentification
pour un intranet comportant des sous sites.
J'utilise les sessions PHP par cookies.
Admettons que mon domaine soit toto.fr. Je souhaite que la session
utilisateur soit valable sur toto.fr, sur titi.toto.fr, sur
tutu.toto.fr, etc.


Dans php.ini
session.cookie_domain = ".toto.fr"

Seo-Kyeong KIM-BOUDOT
Le #586831
je vois pas en quoi c'est plus genant de passer les session_id en GET plutot
qu'en cookies...

sinon, en effet, tu peux utiiser un systeme a base de redirections...

- si $_COOKIE[session_name()] existe pas, et si aucun session_id passé en
GET, tu rediriges vers une page speciale
- ensuite sur cette page speciale, si $_COOKIE[session_name()] existe tu en
recuperes la valeur, sinon tu ouvres la session, et ensuite tu re-rediriges
vers la page initiale avec en GET le session_id .

ca t'obliges a mettre ce petit test avant chaque session_start().

fb
poubelleaspam
Le #586425
Merci à tous pour vos réponses.
J'ai fini par comprendre comment marchait la fonction
session_set_cookie_params

Avec un session_set_cookie_params($duree, "", "toto.fr");
mon problème est résolu : tous les sites qui finissent par toto.fr
accèdent bien au cookie de session.
Publicité
Poster une réponse
Anonyme