Non persistence des sessions
Posté : 25 mai 2010, 15:33
Bonjour,
Tout d'abord, merci d'avance si vous lisez tout le pavé qui suis, désolé mais j'ai essayé de faire au plus court.
J'ai deux site sous la même architecture mvc2, avec les mêmes classes et jusque quelques vues, du css et deux trois variables de config qui changent. J'ai un panneau d'administration en ajax, voici comment je m'y suis pris :
- Lors de l'appel d'une fonctionnalité ajax, j'utilise jquery pour appeler un fichier php très simple, relatif à la fonction demandée. J'effectue dedans quelques contrôles de sécurité. En voici un aperçu :
Voici un extrait de la fonction checkGrant() du contrôleur pour l'aperçu :
Tout cela marche pour le mieux en local, mais quand je met les deux sites sur leur serveur respectif, problème ! Un des deux sites fonctionne parfaitement comme en local, par contre pour l'autre dès que j'utilise une fonctionnalité ajax, déjà ça ne marche pas, ça me dit que je n'ai pas les droits, et en plus ça m'efface mes variables de session... C'est bien le test checkGrant() qui est en cause. J'ai testé de renvoyer true automatiquement s'il s'agit d'une requête ajax, les fonctions dynamiques marchent mais dès que je change de page, tout fout le camp : plus de variables de session...
J'ai pourtant mis exactement le même code que pour l'autre site... Je me suis donc penché sur la configuration du serveur, et après un petit ajustement les php.ini des deux serveurs sont strictement identiques.
EDIT : je rajoute la section sessions du php.ini (je ne met pas celle de l'autre site, c'est la même) :
Désolé, j'ai essayé de vous mettre ça bien en forme mais lors du post ça fout tout en l'air...
Bref, j'en perd mon latin.
Des idées ?
Tout d'abord, merci d'avance si vous lisez tout le pavé qui suis, désolé mais j'ai essayé de faire au plus court.
J'ai deux site sous la même architecture mvc2, avec les mêmes classes et jusque quelques vues, du css et deux trois variables de config qui changent. J'ai un panneau d'administration en ajax, voici comment je m'y suis pris :
- Lors de l'appel d'une fonctionnalité ajax, j'utilise jquery pour appeler un fichier php très simple, relatif à la fonction demandée. J'effectue dedans quelques contrôles de sécurité. En voici un aperçu :
session_start();
include_once("../../../ctrl.php");
$ctrl = new Ctrl("");
if($ctrl->checkGrant("ajaxAdmin") && isset($_SERVER["HTTP_REFERER"]) && ($_SERVER["HTTP_REFERER"] == $ctrl->getUrlBase()."admin.html" || $_SERVER["HTTP_REFERER"] == $ctrl->getUrlBase()."admin.html#")) {
if(isset($_POST['id'])) {
echo json_encode(mysql_fetch_array($ctrl->getTabNews($_POST['id'])));
}
} else
die("Vous n'avez pas le droit d'accéder à cette page");
J'appelle donc mon contrôleur qui utilise la classe User pour faire les vérifications nécessaires (je vérifie que la valeur de la variable $_SESSION['statut'] correspond bien à celle d'une session admin).Voici un extrait de la fonction checkGrant() du contrôleur pour l'aperçu :
if($page == null) {
$page = $this->page;
$isAjax = false;
} else
$isAjax = true;
$this->setWork();
$this->user = User::getInstance();
if($this->work->isPageAdmin($page)) {
if(!($this->user->isAdmin())) {
if($isAjax) {
return false;
} else {
$this->msgErr = $this->setError(13);
$_SESSION['msg'] = $this->msgErr;
$_SESSION['codeErr'] = 13;
header("Location: erreur.html");
exit;
}
} else {
if($isAjax)
return true;
}
}
La fonction isAdmin() ne fait que vérifier la variable de session comme dit plus haut.Tout cela marche pour le mieux en local, mais quand je met les deux sites sur leur serveur respectif, problème ! Un des deux sites fonctionne parfaitement comme en local, par contre pour l'autre dès que j'utilise une fonctionnalité ajax, déjà ça ne marche pas, ça me dit que je n'ai pas les droits, et en plus ça m'efface mes variables de session... C'est bien le test checkGrant() qui est en cause. J'ai testé de renvoyer true automatiquement s'il s'agit d'une requête ajax, les fonctions dynamiques marchent mais dès que je change de page, tout fout le camp : plus de variables de session...
J'ai pourtant mis exactement le même code que pour l'autre site... Je me suis donc penché sur la configuration du serveur, et après un petit ajustement les php.ini des deux serveurs sont strictement identiques.
EDIT : je rajoute la section sessions du php.ini (je ne met pas celle de l'autre site, c'est la même) :
Code : Tout sélectionner
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0Bref, j'en perd mon latin.
Des idées ?