Visualizzazione risultati 1 fino 11 di 11

Discussione: Variabili di sessione mutanti

  1. #1
    Guest

    Predefinito Variabili di sessione mutanti

    Ciao a tutti, ho caricato un sito per poter fare dei test e si verifica un problema a livello di variabili di sessione.
    Premetto che in locale tutto funziona.


    Un utente si logga e vengono impostate delle variabili di sessione:
    una che dice se il login è avvenuto
    una con l'id ($_SESSION['id'])
    una con la tipologia di utente (base o amministratore) ($_SESSION['type'])
    ecc.

    Tutto questo avviene solo ed esclusivamente nel file del login. Non ci sono altri file in cui queste variabili verranno modificate. E fin qui ok.

    Accade però, e qui è il problema, che:
    navigando tra le pagine, se nell'url vengono passati parametri chiamati ad esempio 'id' o 'type', il valore delle variabili $_GET['id'] e $_GET['type'] sovrascrivono quello delle variabili di sessione $_SESSION['id'] e $_SESSION['type'] pur non essendoci alcuna istruzione che esegua tutto ciò!

    Vi risultano problemi di questo tipo?

    In caso, provo a postare il codice, ma non capisco perchè in locale questo non avviene. Sicuramente se cambio il nome dei parametri passati, il problema si risolve. Ma non mi sembra una cosa normale

  2. #2
    Guest

    Predefinito

    mmm, non è che da qualche parte usi tali variabili tramite $type o $id anzichè con l'array associativo: $_SESSION['type'] ?


    Ciao!

  3. #3
    Guest

    Predefinito

    No (o almeno non mi sembra).
    Allora mo ti posto qualche frammento di codice..

    Nel login se sul DB trova una entry corrispondente a nick e password, esegue:

    Codice PHP:
    $_SESSION['login']=1;
    $_SESSION['username']=$username;
    $row = mysql_fetch_array($result);
    $_SESSION['type']=$row['type'];
    $_SESSION['id']=$row['uid'];

    header("location: ../index.php");
    In un'altra pagina posso visualizzare la lista utenti se sono loggato. Come utente posso cancellare me stesso, se amministratore posso cancellare tutti gli utenti ma non posso cancellare me stesso.
    Questo avviene tramite un link del tipo:

    index.php?page=4&sez=4&id=$row[uid]&user=$row[username]
    (page e sez individuano la sezione della cancellazione utente. id e user sono ricavati dal db)


    E la sezione a cui punta questo link è così:

    Codice PHP:
    if(isset($_GET['id']))
    {
    $id = addslashes($_GET['id']);
    if(
    $_SESSION['type']==1 and $_SESSION['id']==$id) //IMPEDISCE LA CANCELLAZIONE DELL'AMMINISTRATORE
    echo "Accesso Negato.";
    else
    {
    include
    "sez/delutente.php";
    }
    }
    else echo
    "<p>Non hai i diritti necessari per visualizzare la pagina</p>";
    }
    quello che sta nell'include neanche te lo scrivo, perchè cliccando sul link di cui sopra, $_SESSION['id'] viene immediatamente sovrascritta da $_GET['id'] e in quanto io sono di tipo $_SESSION['type'] == 1, mi risulta Accesso Negato.

    P.S. Grazie per l'intervento tempestivo! :)
    Ultima modifica di consaptest : 12-10-2009 alle ore 12.13.19

  4. #4
    Guest

    Predefinito

    Così riesco a capire ben poco (nel primo stralcio di codice, dove prendi $username?)
    Fai così, apri tutti i file interessati al problema e inizia a stampare l'array SESSION dopo ogni operazione (assegnazioni alle variabili prima fra tutte).
    In questo modo dovresti avere una vista globale su ciò che accade a tale array.


    Ciao!

  5. #5
    Guest

    Predefinito

    ARGH! Caspita, non credevo che pure salvando una $_GET in una variabile, mi accadesse ciò..ho levato quel $id e ora va, ma perchè avviene? e soprattutto perchè in locale non mi ha mai dato sto problema?
    Grazie

  6. #6
    Guest

    Predefinito

    Non credo di aver capito...


    ciao!

  7. #7
    Guest

    Predefinito

    Allora nell'ultimo frammento di codice postato ho levato l'istruzione

    $id = addslashes($_GET['id']);
    e nell'if ho messo direttamente $_SESSION['id'] == $_GET['id']

    e attraverso questo confronto, il valore di $_SESSION['id'] non è mutato (a differenza di prima). Non capisco però, in sostanza che cosa sia cambiato.



    Per rispondere al tuo post precedente che non avevo letto:

    Nel modulo del login, $username lo prendo da una variabile $_POST, proveniente da un form per il login.

    Inoltre, il controllo sulla corretta impostazione delle variabili $_SESSION l'avevo fatto.
    Al momento del login è tutto regolare. Se poco poco clicco su un link in cui un parametro si chiama ad esempio id e ha un certo valore, mi cambia immediatamente il $_SESSION['id']. ora levando quel $id = $_GET['id'] tutto sembra funzionare. Ma continuo a non capirne il motivo.

  8. #8
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Se è abilitata la direttiva register_globals è normale, perchè il PHP crea automaticamente, all'avvio di ogni script, delle variabili globali con i dati provenienti dall'URL, dai form, dai cookies, dalla sessione, dal server web e dal browser.
    In locale avrai la direttiva register_globals disabilitata.

  9. #9
    Guest

    Predefinito

    Da paura, ora comprendo.
    Quindi, se possibile, disattivo register_globals e andrebbe tutto bene

  10. #10
    Guest

    Predefinito

    Puoi disattivare register_globals dal tuo pannello cliccando nell'ingranaggio modificando l'htaccess

  11. #11
    Guest

    Predefinito

    Grazie a tutti per la disponibilità!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •