Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Sessioni

  1. #1

    Sessioni

    Ho le tre seguenti pagine:

    index.php
    Codice PHP:
    <?
    include("config.inc.php");
    include(
    "function.inc.php");

    session_start();

    if (!isset(
    $_SESSION['username']))
    {
        
    top();
        print(
    "HOMEPAGE
        

        

        <a href=\"form_login.php\">Login!</a>
        

        <a href=\"form_registrazione.php\">Nuovo? Registrati!</a>
        

        
    "
    );
    }

    else {
        
    $user $_SESSION['username'];
        print(
    "Bentornato $user !");
    }

    echo 
    date("F j, Y, g:i a"time());
    foot();
    ?>
    form_login.php
    Codice PHP:
    <?
    include ("config.inc.php");
    include (
    "function.inc.php");

    top();
    ?>

    <form method="post" action="login.php">
    Nick:<input type="text" name="username" />

    Password:<input type="password" name="password" />


    <input type="submit" value="Entra..." />
    </form>

    <?
    foot
    ();
    ?>
    login.php
    Codice PHP:
    <?
    include("config.inc.php");
    include(
    "function.inc.php");

    if (
    $id=controllo_login($_POST['username'],$_POST['password'])){
        
    session_start();
        
    header('Location:index.php');
    }

    else    
    header('Location:login_failed.php');

    ?>
    Il problema è che quando la index.php va a controllare il contenuto di $_SESSION['username'] questa variabile è vuota, ragion per cui non mi entra nell'else. Come mai secondo voi?
    EDIT: register_globals è su Off
    Questa la parte relativa alle sessioni su phpinfo();
    codice:
    session
    Session Support 	enabled
    Registered save handlers 	files user
    Registered serializer handlers 	php php_binary wddx
    
    Directive	Local Value	Master Value
    session.auto_start	Off	Off
    session.bug_compat_42	On	On
    session.bug_compat_warn	On	On
    session.cache_expire	180	180
    session.cache_limiter	nocache	nocache
    session.cookie_domain	no value	no value
    session.cookie_httponly	Off	Off
    session.cookie_lifetime	0	0
    session.cookie_path	/	/
    session.cookie_secure	Off	Off
    session.entropy_file	no value	no value
    session.entropy_length	0	0
    session.gc_divisor	100	100
    session.gc_maxlifetime	1440	1440
    session.gc_probability	1	1
    session.hash_bits_per_character	4	4
    session.hash_function	0	0
    session.name	PHPSESSID	PHPSESSID
    session.referer_check	no value	no value
    session.save_handler	files	files
    session.save_path	no value	no value
    session.serialize_handler	php	php
    session.use_cookies	On	On
    session.use_only_cookies	Off	Off
    session.use_trans_sid	0	0
    Dove sbaglio? Grazie

  2. #2
    UP

  3. #3
    Originariamente inviato da ^EvAmPiReS^
    UP
    codice:
    if ($id=controllo_login($_POST['username'],$_POST['password'])){
    rivedi questa if... Usa anche il tag php nella sua forma originale estesa <?php

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Ciao sono nuovo di questo forum,scusa non ho capito se hai risolto il problema,perchè anche io ho un problema analogo al tuo(Forse uguale).Il Mio problema è il seguente,io ho una pagina php dove inizializzo la sessione con session_start(); , e inserisco un dato in una varibile in questo modo $_SESSION['flag1']=1; poi ridireziono in un'altra pagina php dove controllo il contenuto della variabile $_SESSION['flag1'] e me la da vuota,quindi sicuramente ci sarà qualche problema. Ho cambiato anche il file php.ini settando
    session.save_path = "c:/tmp" e creando la cartella tmp ed effettivamente quando mi collego alla pagina di inizializazione della sessione mi crea al suo interno il file contente la variabile e il dato a questo punto non riesco a capire perchè non funziona. Qualsiasi aiuto e ben accetto grazie RAGAZZI

  5. #5
    Originariamente inviato da Folken78
    Ciao sono nuovo di questo forum,scusa non ho capito se hai risolto il problema,perchè anche io ho un problema analogo al tuo(Forse uguale).Il Mio problema è il seguente,io ho una pagina php dove inizializzo la sessione con session_start(); , e inserisco un dato in una varibile in questo modo $_SESSION['flag1']=1; poi ridireziono in un'altra pagina php dove controllo il contenuto della variabile $_SESSION['flag1'] e me la da vuota,quindi sicuramente ci sarà qualche problema. Ho cambiato anche il file php.ini settando
    session.save_path = "c:/tmp" e creando la cartella tmp ed effettivamente quando mi collego alla pagina di inizializazione della sessione mi crea al suo interno il file contente la variabile e il dato a questo punto non riesco a capire perchè non funziona. Qualsiasi aiuto e ben accetto grazie RAGAZZI
    dovresti aprire un tuo thread specificando bene il tuo problema ed accompagnandolo con qualche riga dello script relativo. Messo in coda ad altro problema sicuramente diverso dal tuo crea solo confusione a ^EvAmPiReS^ ed in caso di ricerca.

    Aggiungo solo che il session_start() deve essere presente in ogni pagina ed i cookies abilitati.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Ok grazie dell'informazione scusa EVA

  7. #7

    Re: Sessioni

    Originariamente inviato da ^EvAmPiReS^
    Il problema è che quando la index.php va a controllare il contenuto di $_SESSION['username'] questa variabile è vuota, ragion per cui non mi entra nell'else. Come mai secondo voi?
    Beh la variabile $_SESSION['username'] e' vuota semplicemente perche', nel codice che hai postato, non la assegni mai a nessun valore...

    Nel login, insieme all'istruzione di inizio sessione, devi impostare il valore della variabile $_SESSION['username'] in modo che nella pagina index venga riconosciuto che si e' effettuato il login.

    codice:
    [...]
    if ($id=controllo_login($_POST['username'],$_POST['password'])){
        session_start();
        $_SESSION['username'] = $_POST['username'];
        header('Location:index.php');
    } 
    [...]

    Ad ogni modo quell'if

    $id=controllo_login($_POST['username'],$_POST['password'])

    e' un po' criptico se non ci posti anche il codice delle funzioni che includi poco sopra...

  8. #8
    non lo ho detto nella mia risposta di prima perche' sarebbe stato meglio che ci fosse arrivato da solo ...

    ma:

    1) ---> cosa fa la funzione controllo_login ????

    2) ---> se controlla $_SESSION nella funzione, deve prima diventarne membro con session_start() e non dopo....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Originariamente inviato da Folken78
    Ok grazie dell'informazione scusa EVA
    FIGURATI!

    Originariamente inviato da Darsch2501
    Beh la variabile $_SESSION['username'] e' vuota semplicemente perche', nel codice che hai postato, non la assegni mai a nessun valore...
    Ora va assegnando il valore alla variabile, ma giuro che ci avevo già provato prima di postare con esito negativo...


    Ad ogni modo per completezza ecco il codice della funzione controllo_login:
    Codice PHP:
    function controllo_login($username$password) {
        
    $conn connetti();
        
    $query mysql_query("SELECT username,password FROM privato WHERE username='$username'",$conn) or die( "Errore nella ricerca della password: " mysql_error() );
        
    $info mysql_fetch_assoc($query);
        
    disconnetti($conn);
        if (
    $info['password']==$password) {
            return 
    $info['username'];
        } else {
            return 
    0;
        }

    Grazie ancora, è veramente un forum su cui si può contare

  10. #10
    Ok, allora e' abbastanza inutile che nella if di controllo assegni a $id un valore che comunque tu hai a priori in $_GET['username']...

    Potresti pulire un pochino la funzione:

    codice:
    function controllo_login($username, $password) {
        $conn = connetti();
        $result = mysql_query("SELECT password FROM privato WHERE username = '$username'", $conn);
        if (mysql_num_rows($result) == 1) {
           if (mysql_result($result,0,0) == $password) return TRUE; // utente e password corretti
           else return FALSE; // password errata
        }
        else return FALSE; // utente non trovato
    }
    (i return te li ho divisi il piu' possibile, in modo che magari in futuro puoi prevedere messaggi di errore diversi a seconda dei vari casi)

    E l'if nella pagina login.php

    codice:
    [...]
    if (controllo_login($_POST['username'],$_POST['password']) === TRUE){
        $_SESSION['username'] = $_POST['username'];
        header('Location:index.php');
    } 
    [...]

    Infine, il session_start(); mettilo all'inizio di ogni pagina, ti conviene...

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.