Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    46

    [sessioni] session_regenerate_id

    Scusatemi per il disturbo.
    Sto facendo una piccola classe wrapper per le sessioni. Mi sono imbattuto nel comando session_regenerate_id(). il problema è che mi da un errore:

    Warning: Unknown(): open(tmp\sess_a64fdaa74ee39f5b00cfebff08bdab52, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

    Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (tmp) in Unknown on line 0

    Il codice è semplicemente (per test):

    session_start()
    session_regenerate_id()

    Ovviamente la cartella tmp esiste tanto che se non uso il comando di cui sopra tutto funziona alla perfezione. Stesso problema accade quando uso session_id("stringaId"). Da qualche parte ho letto che con questa funzione è normale. Qualcuno mi saprebbe dare info più approfondite? Negli esempi di php.net session_regenerate_id() funziona dopo aver utilizzato session_start() non ci sono riferimenti a errori o cose del genere.

    Ringrazio e saluto

    Ciao
    Yuri

  2. #2
    http://www.php.net/manual/it/ref.session.php

    Per il warning devi verificare la correttezza del save_path nel file php.ini. Potrebbe essere incompleto. Poi restarta Apache


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    46
    Forse mi sono spiegato in modo confusionario, pardon.
    Il save path è corretto. Le sessioni funzionano alla perfezione, registro variabili leggo, setto id. Ma quando provo a rigenerare l'id... mi da sto errore. Vorrei capire a cosa è dovuto. Sul manuale non ho trovato nulla. Sembrerebbe non riuscire a trovare il file di sessione.

    Aggiungo una cosa che ho notato. Mettiamo di avere iniziato una sessione che ha come nome file 'sess_xxxxetc'. Se provo a rigenerare l'id, mi fa l'output dell'errore indicando il nuovo ipotetico file id 'sess_yyyyyetc', e il suddetto file lo crea nella directory tmp. Vuoto, ma lo crea.

    Unknown(): open(tmp\sess_yyyyyetc bdab52, O_RDWR)

    Ho provato a ignorare l'errore che dopotutto è un warning, settando la variabile $_SESSION; bhe l'errore successivo è 'no such file o directory' (o una cosa così) e me lo aspettavo in effetti. Ma non mi spiego perchè comunque crea il file e dice di non trovarlo.

    La cosa che mi meraviglia è che perlappunto negli esempi di codice degli utenti sul manuale non cè traccia di un errore del genere, e la sequenza è esattamnete: inizia una sessione, rigenera l'id. E non come per session_id('xxxx') prima inizializza un id e poi genera un sessione.

    Presumo a questo punto possa sì essere un problema di configurazione ma non capisco a che livello.

    Per completezza uso php 4.3.7 con Apache 2 su windows 2000

    piero.mac: grazie comunque per il pensiero

    Ciao
    Yuri

  4. #4
    Ma per caso rigeneri la sessione dall'interno di una funzione...??

    la rigenerazione dell'id avviene abbandonando il session_id vecchio e generandone uno nuovo e viene inviato anche il relativo cookie. (non pero' in tutte le ver. di php.) I dati vengono abbandonati.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    46
    Nessuna funzione. Sono nello scope principale.
    In realtà il manuale dice di session_regenerate_id():

    session_regenerate_id() will replace the current session id with a new one, and keep the current session information.
    Vero che invia un nuovo cookie, ma (secondo quello che cè scritto lì, e comincio ad averne i dubbi) non elimina i dati relativi alle variabili all'interno di $_SESSION. Quindi presumo che risalvi un file di sessione già pieno.

    Ed è questo l'unico motivo per cui sono interessato. Vorrei avere la possibilità di rigenerare l'id dopo aver iniziato la sessione.

    Se non trovo soluzioni proverò a simularlo chiudendo la sessione, settando un nuovo id, salvando i dati e riaprendo di nuovo una sessione.

    Mi rimane comunque la curiosità di sapere che diamine accade.

    Ciao
    Yuri

  6. #6
    Quel che succede e' semplice:

    chiude la vecchia sessione ed i dati presenti vengono abbandonati.
    apre una nuova sessione, invia il cookie e crea il file di sess vuoto.
    Scrive i nuovi dati che gli devi passare nella sessione nuova.

    In pratica, ammesso tu abbia dati di sessione che vengono ampliati/completati con lo scorrere delle pagine, se lo user ritornasse a pagine precedenti mantenendo sempre lo stesso id, si troverebbe con dati gia' settati, oppure ammettiamo che si sia organizzato dei dati che devono venire eseguiti una volta soltanto si riparte tutto dall'inizio con una nuova sessione. Incluso il riconoscimento utente.

    Se fai $_SESSION = array(); ottieni lo stesso risultato senza cambiare il numero di sessione. Oppure unset($_SESSION[pippo]) ti azzera uno specifico valore.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    46
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.