Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 21h57   #1
Invité de passage
 
Femme Jacynthe
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Jacynthe
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 2
Points : 2
Par défaut Session à travers domaines/sous-domaines - données non transmises

Alors voilà, je ne suis qu'une ARCHI-débutante en programmation qui en est à ses touts débuts avec les sessions... et ça fait près de 2 semaines que je me frappe la tête sur le mur à essayer de faire fonctionner quelque chose.

J'ai bien tenté d'avoir de l'aide de mon ami Google, et j'ai même acheté un livre de développement web PHP/MySQL mais tout ce qui touche aux sessions ne semble pas m'aider. Il est vrai que j'ai une hiérarchie du site un peu diabolique. Je m'explique.

Je suis à faire le site pour un fabricant de spas, et comme le contenu et les spécifications de produits sont différents selon la région (sans parler de la langue du contenu), le site a été conçu pour être un ensemble de "sites régionaux" (sous.domaine.com). Le site "global" (domaine.com) ne comporte pas vraiment de contenu SAUF pour une partie extranet pour les représentants et détaillants.

Donc, chaque sous-domaine a son propre menu et son propre header
  • header-us pour le site Américain
  • header-uk pour le site Britannique
  • header-fr pour le site Français
  • header-ca-en pour le site Canadien anglais
  • header-ca-fr pour le site Canadien français
Jusque là, tout fonctionne bien sauf que mon petit cerveau de génie s'est réveillé un bon matin pour s'apercevoir que maintenant j'avais un grave problème à savoir: COMMENT LE SITE SAURA QUEL HEADER GÉNÉRER POUR L'EXTRANET?

Du coup, il m'est venu à l'esprit que je pourrais peut-être arriver à régler le problème grâce à des sessions. Ainsi donc, toute page se trouvant sur us.domaine.com comporte ces 2 petites lignes de codes
Code :
1
2
3
 
session_start();  
$_SESSION['region'] = "us";
et ainsi de suite pour les 4 autres sous-sites, en changeant l'appellation selon le principe déterminé avec les header.

J'ai ensuite créé un fichier sessions.php (qui est requis sur chaque page) avec le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<?php
session_start();
$area = '';
if (isset($_SESSION['region'])) {
	$area = $_SESSION['region'];
}
if (isset($_GET['region']) && ($_GET['region'] == 'us' || $_GET['region'] == 'uk' || $_GET['region'] == 'fr' || $_GET['region'] == 'ca-en' || $_GET['region'] == 'ca-en')) {
	$area = $_GET['region'];
	$_SESSION['region'] = $_GET['region'];
}
if ($area == 'us') {
	$area = 'us';
	$_SESSION['region'] = 'us';
}
if ($area == 'uk') {
	$area = 'uk';
	$_SESSION['region'] = 'uk';
}
if ($area == 'fr') {
	$area = 'fr';
	$_SESSION['region'] = 'fr';
}
if ($area == 'ca-en') {
	$area = 'ca-en';
	$_SESSION['region'] = 'ca-en';
}
if ($area == 'ca-fr') {
	$area = 'ca-fr';
	$_SESSION['region'] = 'ca-fr';
}
?>
Peut-être pas très beau et/ou raffiné, mais bon... faut bien commencer quelque part.

Là encore, tout va bien -- jusqu'à un certain point. Au niveau des sous-sites, je suis capable d'insérer le bon header avec un include comme ceci
Code :
1
2
 
<?php require_once("/home/****/public_html/includes/header-$area.php"); ?>
Sauf que lorsque j'arrive sur la page de l'extraweb, il refuse obstinément de se conformer. J'ai inclus le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 <?php 
 if (isset($_GET['region']))
 {
	 require_once("/home/****/public_html/includes/header-$area.php"); 
 }
 else
 {
	 require_once("/home/****/public_html/includes/header.php");
 } 
 ?>
Mais le problème est que ça ne fait qu'inclure le choix du "else", ce qui m'a fait croire que mes sessions ne fonctionnaient pas, sauf que chacun des scripts contient bien un session_start.

J'ai donc inclus un petit code sur une page de sous.domaine.com contenant le lien vers domaine.com/extraweb et le même code sur la page index de l'extraweb pour pouvoir comparer les id de session. Comme de raison, le session_id est différent sur les 2 pages, ce qui explique pourquoi la variable ne se propage pas sur mon extraweb.

J'ai donc continué à chercher sur le web et j'ai inclus dans mon fichier extraweb le code suivant disant de n'ouvrir une nouvelle session que s'il n'en existe pas déjà une
Code :
1
2
 
if (!session_id()) session_start();
Ça n'a toujours pas réglé mon problème. J'ai bien essayé de faire passer le SID dans le lien qui provient de sous.domaine.com vers domaine.com/extraweb mais le SID n'a jamais été inclus au URL alors ça n'a pas gardé mon id de session non plus. J'ai tenté de le faire de 2 manières mais sans aucun résultat.
Code :
1
2
3
4
 
<a href="domaine.com/extraweb/index.php?<?php echo htmlspecialchars(SID); ?>">lien</a>
 
<a href="domaine.com/extraweb/index.php?' . SID . '">lien</a>
Finalement, je me suis dit que le problème pouvait venir du fait que je tente de naviguer à travers des sous-domaines/domaines. J'ai donc créé un fichier init.php qui est requis sur chacune de mes pages contenant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$currentCookieParams = session_get_cookie_params(); 
 
$rootDomain = '.domaine.com'; 
 
session_set_cookie_params( 
    $currentCookieParams["lifetime"], 
    $currentCookieParams["/"], 
    $rootDomain
); 
 
session_name('innocookie'); 
session_start(); 
 
setcookie($cookieName, $cookieValue, time() + 3600, '/', $rootDomain);
mais ça ne fait rien. C'est certain que cela fait référence aux cookies mais les sessions utilisent des cookies selon ce que j'ai lu alors ça POURRAIT avoir une corrélation.

Donc, si mon post de 25 milles de long ne vous a pas communiqué cela encore, je ne sais plus quoi faire, je suis à bout d'idée et de plus j'ai un mal de tête à trop me la frapper sur les murs; donc, est-ce que quelqu'un peut me dire ce qui cloche dans mon système de pensée ou dans mon application?
Jacynthe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 22h40   #2
Invité de passage
 
Femme Jacynthe
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Jacynthe
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 2
Points : 2
Par défaut Mise à jour selon IE8

Bon alors en naviguant entre sous.domaine.com et domaine.com/extraweb, la session_id et le cookie sont identiques, sauf que ma variable de session ne fonctionne toujours pas et c'est le header par "défaut" qui apparaît (le choix du else).

En vidant le cache de mon Chrome, la session et le cookie sont identiques aussi dans Chrome, pas juste IE8, mais là encore, la variable ne passe pas. Est-ce que c'est ma condition qui n'est pas bonne?
Jacynthe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h55   #3
Invité de passage
 
Femme Jacynthe
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Jacynthe
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 2
Points : 2
Par défaut On y est presque... enfin...

Citation:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php 
 if (isset($_GET['region']))
 {
	 require_once("/home/****/public_html/includes/header-$area.php"); 
 }
 else
 {
	 require_once("/home/****/public_html/includes/header.php");
 } 
 ?>
J'ai finalement fini par voir quelque chose d'autre que je pouvais essayer avec cette partie de code et ça a fonctionné, à savoir:

Code :
1
2
3
4
5
 
 if (isset($_SESSION['region']))
 {
	 require_once("/home/****/public_html/includes/header-$area.php"); 
 }
À trop regardé le code j'avais carrément manqué ça. Alors là tout marche comme sur des roulettes sur le domaine.com et sous.domaine.com. Sauf que domaine.com est un domaine parké (parked domain) de domaine.ca ET les sous-sites Canadiens sont des sous.domaine.ca.

Mais comme mon cookie est setté avec .domaine.com ... et bien vous devinez que ma page extranet ne GARDE pas les infos de session en provenance des sous-sites Canadiens sous.domaine.ca et comme il est fort probable que dans un proche avenir le site Français soit un domaine parké domaine.fr, le même problème se produira.

Donc là ma question est au niveau des cookies en rapport à ma session. Est-ce qu'il y a une façon de changer mon assignation de cookie pour prendre en considération les domaines parkés? En faisant une recherche sur le web j'avais trouvé une suggestion comme suit:
Code :
1
2
3
 
session_set_cookie_params(0,"/",$_SERVER["SERVER_NAME"]);
$_SESSION['session.cookie_domain'] = $_SERVER["SERVER_NAME"];
mais soit je l'ai mal appliqué ou quelque chose car ça n'a pas fonctionné pour moi. Si je navigue sur sous.domaine.ca et que de là je vais sur domaine.com/extranet/ les 2 session_id sont différentes.

À l'aide!
Jacynthe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h32.


 
 
 
 
Partenaires

Hébergement Web