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