par
enemy » 04 juin 2010, 10:42
J'ai de nouvelles informations sur le problème, j'espère que ça parlera à quelqu'un.
Le second site en prod rencontre exactement le même problème que l'autre à présent, pourtant je n'ai touché à rien, c'est vraiment venu du jour au lendemain. Voilà où j'en suis :
- J'ai désactivé le contrôle d'authentification lors des requêtes ajax, ainsi elles fonctionnent
- Lors de l'actualisation de la page d'admin, mes variables de sessions sont bien vides, et je me fait jeter
- J'ai checké à mort le php.ini et l'ai comparé avec celui de mon localhost, le problème ne viendrait pas de là normalement
Mais là où ça devient intéressant, c'est qu'il n'y a aucun problème avec les fonctionnalités ajax qui n'utilisent pas la base de données... Mes variables de sessions restent bien pleine !
Pour mes accès base, j'utilise une classe perso avec une fonction query qui ouvre la connexion BDD avant la requête et la ferme juste après. En voici un extrait :
public function query($request, $tab = null, $autoClose = true, [...]) {
$this->link = null;
if($this->link == null) {
$rC = $this->connect($onTechno);
if($rC != true) {
return $rC;
}
}
[...]
$retourReq = mysql_query($request, $this->link);
if($autoClose) {
$retourClose = $this->close();
if(is_numeric($retourClose))
return $retourClose;
}
[...]
}
private function connect($onTechno = false) {
[...]
$srv = self::SRV;
$log = self::LOGIN;
$pass = self::PASS;
$db = self::BASE;
try {
$this->link = mysql_connect($srv, $log, $pass);
if($this->link == false)
return 32;
else {
if(mysql_select_db($db, $this->link))
return true;
else
return 33;
}
} catch(Exception $e) {
return 31;
}
}
public function close() {
if($this->link != null) {
if(mysql_close($this->link)) {
$this->link = null;
return true;
}
else
return 37;
} else
return false;
}
Bref, on dirai que l'exécution d'une requête sql m'efface ma session, alors que je n'y fait aucune référence. Bizarre non ?
EDIT : après de malheureux autres tests, il semble que me sois fourvoyé sur la voie du problème de base de données... Le problème est bien lors de l'appel d'un fichier php externe par ajax, bien qu'il y est le session_start() dedans... Pour info, j'ai essayé d'activer la directive session.auto_start dans le php.ini, ça ne fait pas de différence.
A rappeler ce qui se passe : quand j'arrive au fichier ajax, je n'ai déjà plus mes variables de session lors du session_start(). Pourtant, si je regarde le session_id() juste après, il n'a pas bougé. Au niveau des cookies, j'en ai 3 : un cookie connexion et un cookie PHPSESSID avec la même valeur, normal, mais j'ai aussi un
deuxième cookie PHPSESSID avec une autre valeur ! Je ne sais pas si c'est le problème, mais bon, c'est étrange...
EDIT 2 : j'ai supprimé le troisième cookie, il ne se recrée plus, mais ça n'a pas pour autant réglé le problème... Le problème ne vient donc pas de lui.
J'ai de nouvelles informations sur le problème, j'espère que ça parlera à quelqu'un.
Le second site en prod rencontre exactement le même problème que l'autre à présent, pourtant je n'ai touché à rien, c'est vraiment venu du jour au lendemain. Voilà où j'en suis :
[list][*]J'ai désactivé le contrôle d'authentification lors des requêtes ajax, ainsi elles fonctionnent
[*]Lors de l'actualisation de la page d'admin, mes variables de sessions sont bien vides, et je me fait jeter
[*]J'ai checké à mort le php.ini et l'ai comparé avec celui de mon localhost, le problème ne viendrait pas de là normalement[/list]
Mais là où ça devient intéressant, c'est qu'il n'y a aucun problème avec les fonctionnalités ajax qui n'utilisent pas la base de données... Mes variables de sessions restent bien pleine !
Pour mes accès base, j'utilise une classe perso avec une fonction query qui ouvre la connexion BDD avant la requête et la ferme juste après. En voici un extrait :
[php]
public function query($request, $tab = null, $autoClose = true, [...]) {
$this->link = null;
if($this->link == null) {
$rC = $this->connect($onTechno);
if($rC != true) {
return $rC;
}
}
[...]
$retourReq = mysql_query($request, $this->link);
if($autoClose) {
$retourClose = $this->close();
if(is_numeric($retourClose))
return $retourClose;
}
[...]
}
private function connect($onTechno = false) {
[...]
$srv = self::SRV;
$log = self::LOGIN;
$pass = self::PASS;
$db = self::BASE;
try {
$this->link = mysql_connect($srv, $log, $pass);
if($this->link == false)
return 32;
else {
if(mysql_select_db($db, $this->link))
return true;
else
return 33;
}
} catch(Exception $e) {
return 31;
}
}
public function close() {
if($this->link != null) {
if(mysql_close($this->link)) {
$this->link = null;
return true;
}
else
return 37;
} else
return false;
}
[/php]
Bref, on dirai que l'exécution d'une requête sql m'efface ma session, alors que je n'y fait aucune référence. Bizarre non ?
[b]EDIT :[/b] après de malheureux autres tests, il semble que me sois fourvoyé sur la voie du problème de base de données... Le problème est bien lors de l'appel d'un fichier php externe par ajax, bien qu'il y est le session_start() dedans... Pour info, j'ai essayé d'activer la directive session.auto_start dans le php.ini, ça ne fait pas de différence.
A rappeler ce qui se passe : quand j'arrive au fichier ajax, je n'ai déjà plus mes variables de session lors du session_start(). Pourtant, si je regarde le session_id() juste après, il n'a pas bougé. Au niveau des cookies, j'en ai 3 : un cookie connexion et un cookie PHPSESSID avec la même valeur, normal, mais j'ai aussi un [u]deuxième[/u] cookie PHPSESSID avec une autre valeur ! Je ne sais pas si c'est le problème, mais bon, c'est étrange...
[b]EDIT 2 :[/b] j'ai supprimé le troisième cookie, il ne se recrée plus, mais ça n'a pas pour autant réglé le problème... Le problème ne vient donc pas de lui.