Class Session, pb avec session_regenerate_id

Petit nouveau ! | 5 Messages

10 mai 2010, 11:18

Bonjour a tous,

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