Visualizzazione risultati 1 fino 7 di 7

Discussione: Problema con variabili di sessione

  1. #1
    Guest

    Post Problema con variabili di sessione

    Ho creato uno script di login per accedere al mio sito, ma, sebbene il login funzioni in locale, i remoto dà qualche grattacapo.
    Spiego più o meno che cosa fa la parte di codice php che ho omesso: ricava email e password dal post e ricava la password inserita nel database per l'utente cui corrisponde l'email inserita. Il codice seguente, invece, controlla se le due password corrispondono e agisce di conseguenza:

    Codice PHP:
    if($passinserita == $password) {
    $controllo = "ok";
    $_SESSION["login"] = $id;
    }else{
    $controllo = "no";
    }
    Cioè:se corrispondono setta una variabile locale che mi dice che il controllo ha dato esito positivo e una variable di sessione chiamata "login" e il cui valore è quello dell'ID dell'utente ricavato in precedenza dal database.
    Ora, finita l'esecuzione del codice PHP, un meta-tag riciama immedatamente la pagina successiva, che controlla se la variabile di sessione è settata. Ebbene, la variabile di sessione non è mai settata. Ma io sono riuscito a scoprire che invece nella pagina precedente la variabile $controllo era sata settata giustamente su "ok". Quindi ciò che non ha funzionato non è stato il controllo, bensì il settaggio della variabile di sessione. Perché?
    Ovviamente entrambe le pagine iniziano con la funzione session_start ();. Non è la prima volta che utilizzo le variabili di sessione, ma la prima volta che non funzionano. Idee?

    Mi scuso se sono stato poco chiaro...
    Ultima modifica di grecistiuniti : 29-06-2006 alle ore 17.35.35

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Io per gli array in generale ho sempre usato gli apici singoli ma non credo sia questo il problema. Con questo poco codice non riesco a suggerirti nulla. Se aggiungi qualche pezzo di codice in più magari è più facile aiutarti.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    Guest

    Predefinito

    Scusa il ritardo...

    Effettivamente credo che con quel pezzetto di codice non si potesse ricavare molto.
    Ne posto un po' di più:
    Codice PHP:
    <?php
    session_start
    ();
    //Accesso al database
    include("config.inc.php");
    $db = connetti();

    //Ricaviamo le variabili dal Post, crittografando la password:
    $emailinserita = $_POST["emailinserita"];
    $passinserita = md5($_POST["passinserita"]);

    //Ora cerchiamo sul database qualcuno che abbia quest'email e chiudiamo la connessione al database:
    $query = "SELECT 'ID', 'Nome', 'Cognome', 'Email', 'Anno', 'Scuola', 'Classe', 'Password' FROM 'utenti' WHERE 'Email'='$emailinserita'";
    $result = mysql_query($query, $db);
    $row = mysql_fetch_array($result);
    mysql_close($db);

    //Ricaviamo dalla query i dati che ci interessano
    $id = $row['ID'];
    $nome = $row['Nome'];
    $cognome = $row['Cognome'];
    $email = $row['Email'];
    $anno = $row['Anno'];
    $scuola = $row['Scuola'];
    $classe = $row['Classe'];
    $password = $row['Password'];

    //Controlliamo che la password corrisponda:
    if($passinserita == $password) {
    $controllo = "ok";
    $_SESSION["login"] = $id;
    }else{
    $controllo = "no";
    }
    ?>
    Alcune note:
    • Per quanto riguarda la connessione al database, utilizzo un file esterno con una funzione creata da me e che mi restituisce il riferimento al db;
    • I dati ricavati dal post vengono effettivamente presi correttamente, la password criptata eccetera;
    • I dati ricavati dal db, come ID, nome, anno e così via vengono presi correttamente pure quelli;
    • La variabile $controllo viene effettivamente settata su "ok" se inserisco la password corretta e su "no" se la inserisco sbagliata.


    La pagina seguente, cui questa pagina rimanda immediatamente inizia così:
    Codice PHP:
    <?php
    session_start
    ();
    if(isset(
    $_SESSION["login"])){

    //Login effettuato. Troviamo l'ID:
    $id = $_SESSION["login"];

    //Stampiamo un commento HTML per visualizzare l'ID
    print ('<!-- ' . $id . ' -->');
    ?>
    A questo punto controllo se $id o $_SESSION["login"] è impostato e la risposta è negativa. E senza $_SESSION["login"] l'utente non è loggato.

    Idee?
    Grazie.

  4. #4
    Guest

    Predefinito

    direi, come ha detto funcool, di scrivere
    $_SESSION['login']

    e di unire le parentesi a session_start();

    ciao!

  5. #5
    Guest

    Predefinito

    @wrestlingforum
    Non dovrebbe cambiare niente a scrivere l'indice dell'array tra apici singoli o tra virgolette. Sbaglio? Comunque ci ho provato, ma non succede niente. Anche le parentesi.

    ALT!
    Scusate, ho preso un'abbaglio. I dati presi dal database non ci sono, cioè, sono indefiniti! Ho sbagliato a scrivere la query. Adesso controllo e poi posto ancora. Mi scuso.

    EDIT: Mi scuso, ma ho finito le queries per quest'ora. Ho un database classe 1 e non potrei mantenerne uno miglore, per ora. Ci riprovo appena posso.
    Comunque, perché se scrivo in phpMyAdmin
    Codice:
    SELECT * FROM 'utenti'
    mi restituisce errore di sintassi? Ho notato che lui usa praticamente gli accenti gravi (`) e non gli apici o le virgolette. Vuol dire che gli apici non vanno bene? Dovrei scrivere
    Codice PHP:
    $query = "SELECT * FROM `utenti` WHERE `Email`=`$emailinserita`";
    ?
    Ultima modifica di grecistiuniti : 14-07-2006 alle ore 00.01.49

  6. #6
    Guest

    Predefinito

    no, i nomi delle tabelle e delle colonne non vanno tra apici...almeno, io non li ho mai messi e ha sempre funzionato! :) senti una curiosità, hai detto nel primo post di aver provato la pagina con la sessione in locale...cosa usi per provarlo in locale? io ho un problema inverso al tuo (ovvero la sessione NON funziona in locale e FUNZIONA online) cmq per quanto riguarda il tuo problema penso proprio che sia causato dai dati non prelevati correttamente dal database ;)

  7. #7
    Guest

    Lightbulb

    In locale su Windows XP uso Apache (versione 1.qualcosa) con php 4 (non ricordo di preciso). Ma funziona anche su Linux, con Apache2 e php 4.

    Comunque il problema è a questo punto: la query l'ho sistemata e adesso il codice per ricavare dal db è:
    Codice PHP:
    //Ora cerchiamo sul database qualcuno che abbia quest'email e chiudiamo la connessione al database:
    $query = 'SELECT * FROM utenti WHERE Email=\''.$emailinserita.'\'';
    print (
    "<!-- $query -->\n");
    $result = mysql_query($query, $db);
    $row = mysql_fetch_array($result);
    mysql_close($db);

    //Ricaviamo dalla query i dati che ci interessano
    $id = $row['ID'];
    $nome = $row['Nome'];
    $cognome = $row['Cognome'];
    $email = $row['Email'];
    $anno = $row['Anno'];
    $scuola = $row['Scuola'];
    $classe = $row['Classe'];
    $password = $row['Password'];

    print (
    '<!-- ' . $id ." ". $nome ." ". $cognome ." ". $email . " -->\n");

    //Controlliamo che la password corrisponda:
    if($passinserita == $password) {
    $controllo = "ok";
    $_SESSION['login'] = $id;
    }else{
    $controllo = "no";
    }
    print (
    "<!-- " . $controllo . " " . $_SESSION['login'] . " -->\n");
    Il problema è che, mentre la query la vedo scritto correttamente (l'ho fatta stampare solo per sicurezza), i dati vengono fuori correttamente, con nome, cognome eccetera che sono salvati nel db, la variabile $controllo è correttamente settata su "ok", ma la variabile $_SESSION['login'] è vuota.
    Il risultato sulla pagina è:
    Codice HTML:
    <!-- SELECT * FROM utenti WHERE Email='email@email.com' -->
    <!-- 1 Andrea Arteaga email@email.com -->
    <!-- ok  -->
    @luky: hai ragione, i nomi di tabelle, colonne e così via in MySQL non vanno tra apici. Sono troppo abituato a ActionScript, dove se non metto apici o virgolette non scrivo una stringa, ma una variabile... Come vedi ho tolto tutto, ed i risultati ci sono, ma il problema delle sessioni resta.

    EDIT: Ok, inizio a capire che in realtà c'è un errore banale, anzi, una serie di errori banali. Prima di tutto, ho omesso un pezzetto di codice che dice:
    Codice PHP:
    if ($controllo = "ok"){
    ...
    Ovviamente, ciò mi faceva credere che $controllo fosse settato su "ok", mentre la realtà è che io settavo in quel momento la variabile su "ok". Sapete quegli errori che fanno spesso i principianti?
    L'altro problema, ancor più banale, è che devo aver impostato nel db la lunghezza massima della password a 10 caratteri. Non so perché l'avessi fatto, e devo comunque ancora controllare, ma il problema sembra quello. Ovviamente, con la funzione md5() la stringa supera i 10 caratteri, ma solo i primi 10 vengono memorizzati. Ma mi sembra strano che io abbia fatto una scempiaggine simile...
    Insomma: lasciatemi nel mio brodo, se avrò bisogno vi chiederò ancora...
    E scusate i disagi.
    Ultima modifica di grecistiuniti : 14-07-2006 alle ore 00.48.03

Regole di scrittura

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