Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Domanda su sessione, session_start e isset

    ciao!
    c'è qualcosa che mi sfugge.
    questo codice è incluso all'inizio di ogni file:
    [php]
    <?php
    //session_start();

    include_once 'config.php';
    $objConn = new $Connessione();

    if(!isset($_SESSION['utente'])) {
    foreach ($objConn->getUtente($_COOKIE['UTENTE']) as $var) {
    $_SESSION['utente']['email'] = 'CIAO';
    }
    }
    ?>
    due cose.
    session_start() è commentato e non è chiamato da nessun'altra parte.
    inoltre sotto faccio il controllo se $_SESSION['utente'] esiste già.
    da quanto so la variabile di sessione non dovrebbe essere creata, e invece viene creata senza problemi.
    inoltre a rigor di logica la prima volta il valore $_SESSION['utente']['email'] è CIAO.
    ma se io cambio CIAO in, ad esempio, CIA, il valore non dovrebbe cambiare.
    e invece cambia.
    sapete darmi qualche spiegazione??

  2. #2
    Questo script funziona in maniera così anomala solo nel tuo PC di sviluppo o in remoto?
    L'unica spiegazione che mi viene in mente è che ci sia qualche impostazione "strana" nel php.ini.... oppure che nel file che includi (quello con i parametri di connessione) ci sia un utilizzo delle sessioni da qualche parte.

    Altro consiglio.
    Sposta la cartella dove vengono salvate le sessioni da quella di default di Apache.
    Puoi fare così:
    Codice PHP:
    ini_set("session.save_path","percorso/cartella/sessioni");
    session_start(); 
    Puoi in questo modo controllare dove vengono salvati dal server i file di sessione, e controllarne quindi il contenuto.
    Potrei sbagliare ma sono convinto che - se stai facendo prove in locale - il tuo server Apache interno non inizializzi una nuova sessione ad ogni login, ma sovrascriva quella esistente, cioè quella con lo stesso sessionID.
    Se poi, nei tuoi script non prevedi la cancellazione della sessione, vi rimangono salvati i dati precedenti.... visto che è un file di testo, alla fine!

    Non ho capito cosa intendi con:
    se io cambio CIAO in, ad esempio, CIA, il valore non dovrebbe cambiare. e invece cambia.
    Cosa intendi?
    Se lo cambi, è ovvio che deve essere diverso dopo, no?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    allora.
    per quanto riguarda il discorso session_start() confermi che non sono io che non ho capito nulla fino adesso, e questo mi rassicura.
    evidentemente è il provider che ha qualce configurazione particolare, perchè su nessun'altro provider o a casa mi è mai capitato.

    per il secondo problema.
    in toeria se la variabile di sessione è settata il codice all'interno dell'if non dovrebbe essere eseguito, e di conseguenza il valore non dovrebbe cambiare.
    o sbaglio??

  4. #4
    Originariamente inviato da fermat
    per il secondo problema.
    in teoria se la variabile di sessione è settata il codice all'interno dell'if non dovrebbe essere eseguito, e di conseguenza il valore non dovrebbe cambiare.
    o sbaglio??
    Beh... nel tuo codice leggo:
    Codice PHP:
    if(!isset($_SESSION['utente'])) {
     foreach (
    $objConn->getUtente($_COOKIE['UTENTE']) as $var) {
       
    $_SESSION['utente']['email'] = 'CIAO';

    Dal poco che capisco con questo codice, trovo che ci sia un grossolano errore di base.
    Se la variabile di sessione 'UTENTE' non è dichiarata, quindi non è presente nella sessione, vai ad interrogare un oggetto e ti fai restituire un array.
    Cicli poi questo array con il foreach e in ogni ciclo assegni alla variabile $_SESSION['utente']['email'] il valore di CIAO.
    In poche parole, questo codice fa l'esatto contrario di quello che serve a te.
    Non capisco poi un'altra cosa.
    Nel foreach vai a recuperare da una classe, un nome utente o qualcosa del genere.
    La classe restituisce un array e lo cicli nel foreach.
    Per ogni rigo del foreach, istanzi una variabile $var che poi non usi.
    Per ogni ciclo del foreach, indichi allo script di sovrascrivere la variabile $_SESSION['utente']['email'].
    Non capisco proprio cosa tu voglia fare.
    Forse è il caso che spieghi bene cosa deve fare questo script, perché secondo me il problema non è delle sessioni, ma di procedimento.

    Originariamente inviato da fermat
    evidentemente è il provider che ha qualce configurazione particolare, perchè su nessun'altro provider o a casa mi è mai capitato.
    A questo riguardo, hai controllato se per caso le sessioni vengono istanziate dal file della classe che utilizzi nel codice?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    allora, il CIAO l'ho messo solo per fare delle prove veloci, senza cambiare continuamente valore nel database.
    quindi ovviamente sarà poi levato in sostituzione di $var e i campi che mi servono.

    per il resto, se ho capito male mi stai dicendo di dichiarare $_SESSION['utente'] prima dell'if.
    tipo:
    Codice PHP:
    $_SESSION['utente'] = NULL

    PS: penso che cambierò provider perchè questo che sto usando adesso ha qualcosa di strano.
    anche se distruggo le variabili di sessione sembra che rimangano aperte per un pò....

  6. #6
    Originariamente inviato da alcio74
    Forse è il caso che spieghi bene cosa deve fare questo script, perché secondo me il problema non è delle sessioni, ma di procedimento
    Avevo scritto di spiegare a cosa ti serve lo script.
    Secondo me stai sbagliando alla grande la sequenza delle azioni da fare, ma non avendo la sfera di cristallo, non so come poterti aiutare.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    ciao!
    scusa il ritardo ma ero convinto fosse il provider su cio stavo.
    e avevo ragione.
    l'ho spostato su aruba e funziona tutto.

    e infatti se io cambio CIA da CIAO il valore rimane CIA.
    lo scopo di queste righe:
    Codice PHP:
    if (!isset($_SESSION['utente'])) {
        foreach (
    $objConn->getUtente($_COOKIE['UTENTE']) as $var) {
            
    $_SESSION['utente']['username'] = $var['utente_user'];
            
    $_SESSION['utente']['email'] = $var['utente_email'];
        }

    è quello di non effettuare la query se $_SESSION['utente'] è già settato.
    adesso se cambio il valore della email nel db e non effuttuo il logout o chiudo il browser, il valore sulla pagina non cambia.

    ed inoltre se levo session_start non viene creata nessuna variabile di sessione.

  8. #8
    Beh... almeno abbiamo scoperto cosa creava questa anomalia!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    ma infatti ero sicuro al 99% perchè non mi era mai successa una cosa del genere.
    se trovo un pò di tempo mi coerco qualcosa in phpinfo().

    grazie per l'aiuto!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.