Je cree une classe Session afin d'utiliser une BDD avec mes sessions via session_save_set_handle(...)
Mon pb est que je souhaiterais regenerer l'id de session à chaque session_start et que je ne dois pas avoir bien compris le fonctionnement de session_regenerate_id.
Voici un bout de code pour mieux comprendre :
public function setSessionData($sid, $donnees)
{
$BDD = new BDD();//couche d'abstraction BDD
$BDD->connexion($this->sessionBase);
$sql = 'SELECT
COUNT(sessionID) AS total
FROM `'.$this->sessionTable.'`
WHERE sessionID = '.$BDD->safeString($sid)
;
if( $BDD->requete($sql) )
{
$nbIDSess = $BDD->getResult();
if ( $nbIDSess[0]['total'] > 0 )
{
//Jusqu'ici tout va bien
$this->Error->add('Original sid = '.$sid);
$this->Error->add('Original session_id = '.session_id());
session_regenerate_id();
$this->Error->add('Regenerate sid = '.session_id());
//Et la c'est le drame,
$sql = 'UPDATE
`'.$this->sessionBase.'`.`'.$this->sessionTable.'`
SET
`'.$this->sessionTable.'`.`sessionName` ='.$BDD->safeString(session_name()).',
`'.$this->sessionTable.'`.`sessionID` ='.$BDD->safeString(session_id()).',
`'.$this->sessionTable.'`.`sessionData` ="'.$BDD->safeString($donnees).'",
`'.$this->sessionTable.'`.`temps` ='.intval(floor(time()/60)+$this->expire).'
WHERE
`'.$this->sessionTable.'`.`sessionID` ='.$BDD->safeString($sid);
;
}
else
{
$sql = 'INSERT INTO
`'.$this->sessionBase.'`.`'.$this->sessionTable.'`
SET
`'.$this->sessionTable.'`.`ip` ='.$BDD->safeString($_SERVER["REMOTE_ADDR"]).',
`'.$this->sessionTable.'`.`sessionName` ='.$BDD->safeString(session_name()).',
`'.$this->sessionTable.'`.`sessionID` ='.$BDD->safeString(session_id()).',
`'.$this->sessionTable.'`.`sessionData` ="'.$BDD->safeString($donnees).'",
`'.$this->sessionTable.'`.`temps` = '.intval(floor(time()/60)+$this->expire)
;
}
return $BDD->requete($sql);
}
}
Mon debbugueur s'appel $Error->add();Donc je pense que j'utilise mal session_regenerate_id, puisque ca ne fonctionne pas ainsi. Mon id de session est toujours le meme.
Par contre si je fais un session_regenerate_id en dehors de la classe, ca fonctionne... Mal actuellement puisque ca n'UPDATE pas mais ca INSERT un nouvel enregistrement.
Voila, j'espere avoir ete a peu pres clair
Cordialement