Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema con sessioni

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37

    Problema con sessioni

    Ho un problema che a me sembra incomprensibile.
    Ho fatto un sistema per la gestione del login degli utenti, formato principalmente da 3 file:

    Login.php
    Codice PHP:
    <?php

        
    // Richiama il file con le funzioni per la connessione al DB
        
    require_once( 'config.inc.php' );
        
        
    // Include il file con le funzioni per il login
        
    require_once( 'login_funcs.php' );
        
        
    //richiamo il file in cui vengono assegnati gli indirizzi delle cartelle, e creo un'istanza di smarty
        
    require_once('smarty/setup.php');
        
    $smarty = new Smarty;
        
        
    // Connessione e selezione del DB
        
    $conn connetti_db();
        
        
    // Controlla se c'è una corrispondenza nel DB. Se effettivamente è presente una corrispondenza ritorna 1,
        // altrimenti un messaggio d'errore. Questa funzione si occupa anche di settari i valori di sessione
        
    $login user_login();
        
        
    // Se la funzione user_login() ha tornato 1-> aggiorno il valore di last_login nel DB e reindirizzo l'utente
        
    if( $login == ){
            
            
    // Definisco le variabili inserite in automatico    
            // Definisce il fuso orario utilizzato
            
    date_default_timezone_set('Europe/Rome');
            
            
    // Valorizzo una variabile con la data e l'ora corrente, nel formato YYYY-MM-DD HH:MM:SS
            
    $data date"o-m-d H:i:s" );
            
            
    // Inserisco nel database la data dell'ultimo login dell'utente
            
    $sql "UPDATE users_reda SET last_login = '$data' WHERE reda_id = '" $_SESSION['id'] . "'";
            
    $result mysql_query$sql ) or die( mysql_error());

            switch( 
    $_SESSION'gruppo' ] ){
                case 
    1:
                    
    header'Location:login_ok.php' );
                    break;
                case 
    2:
                    
    header'Location:prova.php' );    // Mettere la pagina principale per i redattori
                    
    break;
                case 
    3:
                    
    header'Location:prova.php' );    // Mettere la pagina principale per gli amministratori
                    
    break;
            }

        } else {
            
    // Se il login non è andato a buon fine stampo un messaggio d'errore
            
    $smarty-> assign'msg'$login );
            
    $smarty-> display'accesso2.tpl' );
            
        }
            
    ?>
    login_funcs.php
    Codice PHP:
    function user_login(){
            
            
    // Controlla se sono stati inseriti sia Username che Password
            
    if( !$_POST'uname' ] || !$_POST'pass' ] ) {
                
                
    // Se non sono stati inseriti restituisce una stringa d'errore
                
    $feedback 'ERRORE - Mancano Username e/o Password';
                return 
    $feedback;
            } else {
                
                
    // Altrimenti passa a controllare i dati inseriti con quelli presenti nel database
                
    $uname strtolower$_POST'uname' ] );
                
    $pass strtolower$_POST'pass' ] );
                
                
    // Controllo se esiste un utente con quel username e quella password
                
    $sql "SELECT * FROM users_reda WHERE reda_uname='$uname' AND reda_pass='$pass'";
                        
                
    $result mysql_query$sql );
                
                if( !
    $result || mysql_num_rows$result ) < ) {
                    
    $feedback 'ERRORE- Username non trovato o Password sbagliata';
                    return 
    $feedback;
                } else {
                    
    $row mysql_fetch_array$result );
                    
                    
    set_session$row'reda_id' ], $row'reda_nome' ], $row'reda_group' ] );
                    
                    return 
    1;
                }
            }
        }
        
        function 
    set_session$id$nome$gruppo ){
            global 
    $supersecret_hash_padding;
            
            
    // Controllo che siano settati tutti i parametri
            
    if( !$id || !$nome || !$gruppo ){
                
    $feedback 'ERRORE- C\'è stato un errore nella trasmissione dei dati';
                return 
    $feedback;
            } else {

                
    // Valorizzo i campi dell'array $_SESSION
                
    $_SESSION['id'] = $id;
                
    $_SESSION['nome'] = $nome;
                
    $_SESSION['gruppo'] = $gruppo;
                
    $_SESSION['id_hash'] = md5$nome $supersecret_hash_padding );
                
                
    // Valorizzo il cookie
                
    setcookiesession_name(), md5$nome $supersecret_hash_padding ), time() + 3600'/' );
                
    //setcookie( 'id_hash', , time() + 3600, '/' );
            
    }
        } 
    login_ok.php
    Codice PHP:
        session_start();
        
        
    //richiamo il file in cui vengono assegnati gli indirizzi delle cartelle, e creo un'istanza di smarty
        
    require('smarty/setup.php');
        
    $smarty = new Smarty;
        
        if( isset( 
    $_SESSION['nome'] ) ) {
            
            
    $msg 'Benvenuto ' $_SESSION['nome'] . '. Adesso sei correttamente loggato';
        
        }
            
        
    $smarty->assign('msg'$msg);
        
    $smarty->display('accesso2.tpl'); 
    I dati vengono inviati tramite POST a login.php, il quale per controllarli richiama user_login() che è contenuto in login_funcs.php. Fin qui tutto ok, se non fosse per quando user_login() richiama set_session. Qui c'è la prima anomalia, infatti riesce a scrivere sull'array $_SESSION anche senza che sia stata iniziata nessuna sessione, e non da nessun errore!
    Andando avanti quando login.php mi reindirizza a login_ok.php si crea la cosa più strana, infatti il messaggio che mi viene stampato mi scrive il nome sbagliato!
    In DB ho 2 utenti e se mi loggo come il primo mi da il benvenuto come se fossi il secondo e viceversa, però i dati sul DB vengono aggioranti correttamente! Non capisco come faccia ad accedere alla linea del DB sbagliata....
    Se invece aggiungo session_start() nella funzione user_login() mi visualizza il nome corretto solo al secondo accesso consecutivo dello stesso utente... In pratica la sequenza è: accedo come ut1 e vedo il nome di ut1
    accedo come ut2 e vedo il nome di ut1
    accedo come ut2 e vedo il nome di ut2
    Se invece alterno gli accessi vedo sempre il nome sbagliato, come se mi leggesse i valori salvati nella sessione precedente.

    A rendere il tutto più misterioso c'è il fatto che prima avevo fatto un sistema di login in un unico file, e li funziona tutto correttamente, ma le istruzioni sono praticamente le stesse, solo che invece di essere sotto forma di funzioni sono istruzioni sequenziali.

    Altra domanda, se definisco un nome di sessione, come faccio a dire a PHP che deve andare a controllare il cookie con quel nome? Invece di cercare quello col nome standard? Perchè se provo a settare il nome, o non mi valorizza l'array $_SESSION o non so cosa, dato che in login_ok.php mi dice che la cella di $_SESSION che utilizzo non è settata!

    Dopo di questo volevo chiedere qual'è la procedura corretta per ricordare un utente tramite sessione, cosa devo controllare effettivamente in ogni pagina protetta? Non so se mi risponderete come intendo io, perchè da nessuna parte ho trovato la risposta che cerco.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    Up
    Pleaze ho già buttao via una giornata di lavoro.... se qualcuno ha anche solo una vaga idea di cosa possa essere...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    up

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    37
    Sono riuscito a capire che il problema non è che non scrive nell'array $_SESSION, ma nel fatto che non lo trasmette correttamente, infatti non è + valorizato nel file login_ok.php .

    Non riesco a capire perchè, con lo stesso file ed un'altra procedura che fa le stesse identiche cose funziona perfettaemente, con questa procedura di login no... Veramente non capisco perchè....

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.