Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sessions PHP et sous domaines

5 réponses
Avatar
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

5 réponses

Avatar
Eric Daspet
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/

Avatar
Mat Free
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

Avatar
Seo-Kyeong KIM-BOUDOT
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
Avatar
Canard Furieux
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"

Avatar
poubelleaspam
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.