Ho semplicemente fatto in questo modo, simulando quel che dovrebbe fare session_rigenerate_id():
Codice PHP:
function setSessionId($id = NULL, $mode = 'sha1')
{
// se gli ho passato qualcosa tento di usarlo
// come id. Lo valido. Se non è valido do errore.
if (isset($id) && !$this->_validateId($id) )
{
$this->_error(3);
$this->_flags['disable'] = true;
return false;
}
// se non ho passato nulla lo genero io col mode passato
if (!isset($id)) $id = $this->_generateId($mode);
// se è già settato sessionId la sessione è già cominciata
// e devo rigenerare l'id. Altrimenti lascio fare a session_start inizializzando solo id tramite session_id('xxx').
if (isset($this->_sessionId))
{
//memorizzo le vecchie variabili
$backUpVars = $this->_sessionVars;
// distruggo la sessione e il cookie
session_destroy();
setcookie(
$this->_conf['cookieName'],"",
$this->_conf['cookieExpire'],
$this->_conf['cookiePath'] );
// inizializzo l'id
session_id($id);
// riapro una sessione.
session_start();
$this->_sessionId = session_id();
$this->_sessionVars = &$_SESSION;
$this->_sessionVars = $backUpVars;
return true;
} else {
// inizializzo l'id: la sessione non è ancora stata aperta
session_id($id);
return true;
}
}
E' un metodo di una classe ma le variaili si dorebbero riuscire a capire.
Se qualcuno sa perchè session_rigenerate_id() non funziona dopo session_start(), pedantemente ripetendo che dovrebbe funzionare da manuale, mi avrete tolto una curiosità.
grazie piero.mac
Ciao
Yuri