Passer session d'un sous-domaine à l'autre ?

Passer session d'un sous-domaine à l'autre ? - PHP - Programmation

Marsh Posté le 25-03-2006 à 15:14:38    

Bonjour,
 
J'ai 3 sites :
 
http://www.sousdomaine1.domaine.fr
http://www.sousdomaine2.domaine.fr
http://www.sousdomaine3.domaine.fr
 
Il n'y a donc que les sous-domaines qui diffèrent.
 
Je souhaite, quand j'ouvre une session à partir d'un de ces sites, qu'elle soit ouverte et valide sur les autres.
 
Est-ce possible ? Et si oui comment ? Car pour l'instant je n'y arrive pas.
 
Merci pour vos réponses, même négatives.

Reply

Marsh Posté le 25-03-2006 à 15:14:38   

Reply

Marsh Posté le 25-03-2006 à 15:52:55    

non ce n'est pas possible, la session est définie pour une sous domaine.
 
c'est justement l'avantage, c'est qu'une session sur le site principale  
www.site.com ne se retrouve pas sur le site demo.site.com par exemple
 
Cdt


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 25-03-2006 à 15:56:58    

oulà, ça dépends de l architecture réseau...
 
si ça se passe sur un même serveur, un petit tour sur la doc php de session t aidera à trouver les bonnes options ini_set().
 
sinon, il te reste deux possibilités:
- facile mais un peu dégeu: faire passer un sérialize des variables de sessions d un domain à l autre,
- plus clean: une base de donnée commune pour stocker les variables de sessions

Reply

Marsh Posté le 25-03-2006 à 15:59:30    

c'est complétement à déconseiller. un sous domaine être indépendant.


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 25-03-2006 à 16:03:47    

non, pas forcément. si l internaute tient à consulter ses mails sur mail.dom.com puis revenir au forum sur forum.dom.com, en passant par wiki.dom.com, il est tout à fait utile de garder les même paramètres de session, mais de séparer en sous domaines.
 
Autre solution plus simple pour réseau interne:
ini_set(session.save_path...) permet de définir un chemin d accès aux fichiers de session, en partageant ce dossier en réseau à l aide de NFS ou SAMBA tu peut partager les sessions entre serveurs.

Reply

Marsh Posté le 25-03-2006 à 16:05:47    

> un sous domaine être indépendant.
sûrement pas pour le load balancing...

Reply

Marsh Posté le 25-03-2006 à 18:36:21    

Citation :

si ça se passe sur un même serveur, un petit tour sur la doc php de session t aidera à trouver les bonnes options ini_set()


Les 3 sites sont sur le même serveur. Mais je ne comprends pas ce que permet exactement cette fonction.
 

Citation :

faire passer un sérialize des variables de sessions d un domain à l autre,


Peux tu être plus précis stp. Me montrer un exemple ?
 

Citation :

une base de donnée commune pour stocker les variables de sessions


Ok, mais comment rendre valide une session à partir d'un autre sous domaine ?
 
Merci pour vos réponses
 
PS : ca ne serait pas plus simple avec des cookies ?

Reply

Marsh Posté le 25-03-2006 à 18:57:37    

> PS : ca ne serait pas plus simple avec des cookies ?
Les sessions utilisent déjà des cookie...
 
Ok, pour exemple, puisque c est sur le même serveur, tu peut sans problème réserver un dossier spécial pour que PHP y stocke les variables de session.
 
config_session.inc:

Code :
  1. <?
  2. // utiliser le même répertoire pour tous les serveurs
  3. ini_set("session.save_path","/web/secure/phpsessions/" );
  4. // rétablir une session d un autre serveur
  5. if(isset($mysid))
  6.   session_id($mysid);
  7. ?>


 
page.php:

Code :
  1. <? include("config_session.inc" ); session_start(); ?>
  2. <a href="http://domaine2.dom.net/?mysid=<? echo session_id(); ?>">changer de serveur</a>


 
Par contre tu n a plus la génération automatique de n° de session, tu doit le faire à chaque lien en utilisant ``mysid``.


Message édité par nargy le 25-03-2006 à 18:58:50
Reply

Marsh Posté le 25-03-2006 à 18:59:33    

edit: j ai change page.php ci dessus.

Reply

Marsh Posté le 25-03-2006 à 19:04:01    

Merci beaucoup !
 
J'essai ça lundi.

Reply

Marsh Posté le 25-03-2006 à 19:04:01   

Reply

Marsh Posté le 27-03-2006 à 11:23:49    

Salut !
 
Ca marche... presque parfaitement.
Je récupère bien mon id de session sur les 3 sites.
Mais est-ce normal que je ne récupère pas les variables passés en sessions sur les 3 sites ?
Par exemple si je fais : $_SESSION['test'] = 'Ca marche !'; sur un des sites, je n'arrive pas à récupérer  $_SESSION['test'] sur les autres.
 
PS : peux-être faut-il simplement enregistrer l'id de session dans une table et vérifier à chaque fois...


Message édité par mazou le 27-03-2006 à 11:31:23
Reply

Marsh Posté le 27-03-2006 à 11:52:43    

Normalement si tu mets:
ini_set("session.save_path","/web/secure/phpsessions/" );
sur tous les serveurs, ils enregistrent les cookies au même endroit:
/web/secure/phpsessions/
 
tu doit inclure le fichire config_session.inc ci dessus (ou un equivalent) sur absolument toutes tes pages de tout tes serveurs..

Reply

Marsh Posté le 27-03-2006 à 12:04:05    

nargy a écrit :


Normalement si tu mets:
ini_set("session.save_path","/web/secure/phpsessions/" );
sur tous les serveurs, ils enregistrent les cookies au même endroit:
/web/secure/phpsessions


 
C curieux ca ne fonctionne pas, je ne peux pas récupérer les variables précédemment enregistrées

Reply

Marsh Posté le 27-03-2006 à 12:10:31    

regarde dans le répertoire:
si il existe
si il y des trucs dedans

Reply

Marsh Posté le 27-03-2006 à 12:13:32    

nargy a écrit :

regarde dans le répertoire:
si il existe
si il y des trucs dedans


J'ai bien mes fichiers des sessions ca pas de pb.
Mais lors de l'appel d'une variable précédement enregistrée sur un autre sous domaine il n'y a rien.

Reply

Marsh Posté le 27-03-2006 à 12:14:00    

s il y a rien dedans essaye de mettre le ini_set directement dans ton php.ini

Reply

Marsh Posté le 27-03-2006 à 12:15:47    

> Mais lors de l'appel d'une variable précédement enregistrée sur un autre sous domaine il n'y a rien.
 
tu as bien passé le sid de la session? et restauré avec sessionid($sid)?
 

Reply

Marsh Posté le 27-03-2006 à 12:19:22    

sinon il te reste cette solution:
http://fr2.php.net/manual/en/funct [...] andler.php
il y a des exemples avec une base de donnée à la fin de la page, dans les commentaires des utilisateurs...

Reply

Marsh Posté le 27-03-2006 à 12:49:11    

Je suis con...
ca une erreur de ma part.
Au fait il faut faire :

Citation :

if(isset($mysid))
session_id($mysid);
session_start() ;


Et ca fonctionne (ajouter le session_start()).
 
Merci beaucoup pour ton aide.

Reply

Marsh Posté le 27-03-2006 à 13:16:58    

mazou,
 
as-tu tout simplement essaye de mettre cette directive dans ton php.ini (marche aussi avec un .htaccess ou ini_set()) :
 
session.cookie_domain = "domaine.fr"
 
Theoriquement ca doit te permettre de maintenir une session sur plusieurs sous-domaines...

Reply

Marsh Posté le 27-03-2006 à 13:19:35    

Woutcha a écrit :

mazou,
 
as-tu tout simplement essaye de mettre cette directive dans ton php.ini (marche aussi avec un .htaccess ou ini_set()) :
 
session.cookie_domain = "domaine.fr"
 
Theoriquement ca doit te permettre de maintenir une session sur plusieurs sous-domaines...


En effet c super simple.
et ca fonctionne très bien !
 
Merci beaucoup !


Message édité par mazou le 27-03-2006 à 13:24:08
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed