• User Attivo

    Aiuto sessione che non si propaga... credo...

    Ciao a tutti
    temo mi sfugga qualcosa sulla gestione delle sessioni in php.

    Mi spiego meglio. Sto realizzando un sistema di login.

    in parole povere:

    Ho una pagina in cui verifico i dati inseriti dall'utente, con quelli salvati nel db. Questa pagina fa partire una sessione. Nella sessione inserisco alcuni dati dell'utente.

    Se tutto risulta corretto passo ad un altra pagina che dovrebbe leggere i dati salvati nella sessione.

    Qui tutto si ferma. i dati salvati nella sessione non me li vuole proprio mostrare.

    Ho visto parecchie guide in cui si parla di propagare manualmente il PHPSESSID in caso di cookie disabilitati.

    La cosa strana è che il mio PHPSESSID se lo richiamo viene stampato a schermo. Questo mi fa presumere che i cookie stiano funzionando.

    Per il momento non ho effettuato verifiche sui cookie, in quanti sin dall'inizio, se richiedo i dati salvati nella sessione, nella stessa pagina in cui viene aperta, me li stampa senza problemi.

    Oltretutto il pc è il mio, e i cookie sono abilitati.

    Cosa che non mi è ben chiara è la differenza tra PHPPSESSID e SID, sono la stessa cosa? cambiano solamente in base alla versione di php?

    Mi potreste aiutare a capire cosa mi sfugge?

    Altre info:

    Per l'aggiunta dei dati alla sessione uso la variabile $_SESSION
    Prima di richiamare i dati li salvo in una variabile (ho visto che non si possono richiamare all'interno di una stringa)
    Tutti i dati sono salvati anche in un cookie dal quale riesco a leggerli senza problemi.
    Ho globalizzato le variabili $HTTP_POST_VARS, $_COOKIE ( a livello di test)
    Per richiamare PHPSESSID uso semplicemente la variabile $PHPSESSID
    La versione di php è 4.4.7 su server aruba
    I valori session.use_only_cookies off session.use_trans_sid off
    Tutte le parti di codice relative a cookie e sessioni si trovano prima dell'apertura dei tag html

    Un anticipato grazie a tutti coloro che mi sapranno aiutare

    Ciao


  • User

    tieni presente che su aruba è attivo il register globals
    io avevo lo stesso problema e come sempre davano la colpa a noi programmatori
    io lho risolto facendo un if sull'inizializzazione delle variabili

    if(isset($_session[login])
    {
    ...........
    variabili
    ................
    }

    qualkosa in questo stile
    però controlla che il tuo script sia giusto
    magari testalo in locale disattivando il register_globals almeno vedi se è quello se no magari è il tuo script
    ciauz


  • User Attivo

    E se non è isset?
    Cosa succede?

    Tocca non usare le sessioni e tutto il casino che ho fatto fin ora non serve a niente?

    Mi son messo un if che chiede se la variabile è settata, dice che non esiste...

    Ho anche provato a passare in get la variabile ?PHPSESSID ma il risultato non cambia.

    Lo script, non credo sia sbagliato tutto quello che fa è:

    (sulla prima pagina)
    session_start()
    $_SESSION[] = variabile

    (sulla seconda pagina)
    variabile per stringa = $_SESSION[]

    echo variabile per stringa


  • User Attivo

    Ho fatto un test a register globals spente utilizzando:

    Questo emula register_globals Off. Ricorda che questo codice deve essere chiamato all'inizio dello script, oppure dopo session_start() se lo usi per iniziare la session.

    <?php
    // Emulazione di register_globals off
    function unregister_GLOBALS()
    {
    if (!ini_get('register_globals')) {
    return;
    }

    // Might want to change this perhaps to a nicer error
    if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
        die('GLOBALS overwrite attempt detected');
    }
    
    // Variables that shouldn't be unset
    $noUnset = array('GLOBALS',  '_GET',
                     '_POST',    '_COOKIE',
                     '_REQUEST', '_SERVER',
                     '_ENV',     '_FILES');
    
    $input = array_merge($_GET,    $_POST,
                         $_COOKIE, $_SERVER,
                         $_ENV,    $_FILES,
                         isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
    
    foreach ($input as $k => $v) {
        if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) {
            unset($GLOBALS[$k]);
        }
    }
    

    }

    unregister_GLOBALS();

    ?>

    ma il ruìisultato non cambia...

    Secondo voi funziona sto giochino, oppure le register globals non centrano?


  • Bannato User Attivo

    in testa a tutti i file php che devono utilizzare la sessione metti ```
    session_start();


  • User Attivo

    Sul serio? va in tutte le pagine?

    Si arrangia lui poi a capire che la sessione è gia stata aperta tramite il PHPSESSID?

    Glielo devo passare io? oppure baste che esista?

    Magari lo devo far diventare SID?

    Scusate tutte ste domande a raffica ma se è solo cosi ci resto davvero come un pirla...

    Altra cosa avendo la sessione che si apre su queste pagine, non rischio che qualcuno ci possa inserire quel che gli pare??

    Magari tramite una form?

    Viene riconosciuto session start da htmlentities o striptags?


  • User

    session_start() riconosce tutto da solo e non cè bisogno di registrare di nuovo i parametri di sessione