Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619

    Variabile di Sessione sovrascritta????? Baco?

    Ecco il mio codice:

    codice:
    echo "Prima: ".$_SESSION['usergroup'];
    
    
    $usergroup  = $_REQUEST['usergroup'];
    
    
    echo " - Dopo: ".$_SESSION['usergroup']."
    ";
    Incredibilmente (almeno per me) la pagina stampa:

    Prima: 1 - Dopo: 2

    la variabile di sessione viene quindi sovrascritta con il valore di $_REQUEST['usergroup'] che ha lo stesso nome ma in un array diverso.

    E invece no perche se dal modulo nella pagina precedente invio con nome "userg" e in questa pagina recupero con:

    $usergroup = $_REQUEST['userg'];

    succede lo stesso.

    :master: :master: :master: :master:

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non ci ho capito molto, ma...
    per caso hai register_globals a on?

  3. #3
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619
    Era proprio quello porcaccia cane.

    Avevo settato le register_globals a on per testare un progetto di qualche anno fa martedì e non mi sono piu' ricordato di reimpostarle a off .

    Cmq ancora non mi e' chiaro perche' succedesse.

    Me lo sai spiegare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    con register_globals ad on puoi accedere le variabili di $_POST $_GET $_SERVER $_COOKIE direttamente senza usare i suddetti array

    Per chiarire $_GET['ciao'] puoi accederla anche con $ciao......

    Che accadesse anche con $_SESSION non lo sapevo.... ma evidentemente e' cosi'.....

    No pvt per sollecitare risposte, grazie.

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Graboid
    Me lo sai spiegare?
    Devo ammettere che non mi è chiaro al 100%, ma evidentemente quando assegnavi la variabile $usergroup sovrascrivevi anche quella omonima di sessione.

  6. #6
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    Con register_globals settato ad On, tutte le variabili sono uguali.

    Esempio: index.php?variabile=ciao

    La condizione $_GET['variabile']==$_POST['variabile']==$_SESSION['variabile']==$_COOKIE['variabile']==$_SERVER['variabile']==$variabile
    è vera

    In breve, con register_globals ad On, tutte le array ($_SESSION,GET,COOKIE,POST,REQUEST,SERVER,ENV) contengono gli stessi valori

    Un tempo si usavano le register globals ad on perchè era comodo, quando si passava un parametro via get (nell'esempio il parametro si chiama "variabile"), averlo già impostato in $NOMEVARIABILE (nell'esempio $variabile).

    E' evidente che impostante $variabile='boh'; in uno script, anche $_GET['variabile'] conterrà "boh" e così via per tutte le altre array (GetPostCookieSessionEnv).

    Sono, in breve, tutte uguali.

    E' piu chiaro ora?

  7. #7
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619
    Si adesso mi e' chiaro.

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da PaoDJ
    Con register_globals settato ad On, tutte le variabili sono uguali.

    Esempio: index.php?variabile=ciao

    La condizione $_GET['variabile']==$_POST['variabile']==$_SESSION['variabile']==$_COOKIE['variabile']==$_SERVER['variabile']==$variabile
    è vera

    In breve, con register_globals ad On, tutte le array ($_SESSION,GET,COOKIE,POST,REQUEST,SERVER,ENV) contengono gli stessi valori

    Un tempo si usavano le register globals ad on perchè era comodo, quando si passava un parametro via get (nell'esempio il parametro si chiama "variabile"), averlo già impostato in $NOMEVARIABILE (nell'esempio $variabile).

    E' evidente che impostante $variabile='boh'; in uno script, anche $_GET['variabile'] conterrà "boh" e così via per tutte le altre array (GetPostCookieSessionEnv).

    Sono, in breve, tutte uguali.

    E' piu chiaro ora?


    Non è affatto così.

    Con register_globals a ON il contenuto degli array superglobali viene automaticamente registrato nelle variabili globali, e solo ad inizio script. Non avviene il processo contrario.

    Quindi: pagina.php?id=2, con register_globals a on, produrrà la seguente situazione:

    $_GET['id'] = 2
    $_POST['id'] NON ESISTE
    $_REQUEST['id'] = 2
    $_SESSION['id'] NON ESISTE
    $_COOKIE['id'] NON ESISTE
    $_SERVER['id'] NON ESISTE
    $id = 2 (prodotto dal register_globals)

    Non solo: se all'interno dello script valorizzo, ad esempio, $_POST['id']=4, il valore non viene trasferito alla variabile globale $id, in quanto il register_globals viene eseguito solo a inizio script.

    Un trattamento particolare viene utilizzato solo per le variabili di sessione, il cui scopo è quello di "portarsi dietro" i valori da una pagina all'altra. In questo caso quindi l'assegnazione del valore alla variabile globale si riflette anche sull'array $_SESSION, purché la variabile fosse già definita in sessione all'inizio dello script.
    La prova è che se esegui il codice postato inizialmente da Graboid, aggiungendogli davanti l'assegnazione $_SESSION['usergroup']=1, il risultato è quello da lui descritto solo dalla seconda esecuzione in poi, quando cioè la variabile $usergroup è già registrata in sessione. La prima volta invece il valore della variabile di sessione appena impostata non viene influenzato dall'assegnazione effettuata sulla variabile globale.

    Provo a spiegarmi meglio:

    pagina.php?var=2

    Se in pagina.php ho questo codice:
    Codice PHP:
    session_start();
    $_SESSION['var'] = 1;
    $var $_GET['var'];
    echo 
    $_SESSION['var']; 
    Alla prima esecuzione il risultato della echo sarà 1, mentre dalla seconda in poi sarà sempre 2.
    Questo perché l'assegnazione del valore 2 alla variabile $var si riflette anche su $_SESSION['var'] solo quando tale variabile di sessione era già impostata all'inizio di script, il che non accade alla prima esecuzione.

    Spero sia chiaro. Comunque NON E' VERO che gli array superglobali sono tutti uguali. E' semplicemente vero che i loro valori vengono riportati, in fase di avvio dello script, nelle variabili globali.
    Ho effettuato i test con PHP 4.3.3

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.