Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Header, Location o sessioni?

    Salve,

    ho messo delle pagine private (con login, ecc.) in un mio sito.

    Ho provato il tutto in locale e funziona come mi aspettavo. Dopo molte prove ho inviato tutto al server e con mia sorpresa le cose non vanno più!!!

    Potete aiutarmi a capire il perchè?

    Ecco di che si tratta.

    La pagina protetta chiama la funzione checklogin() che si trova nel file funzioni.php. Questa se è attiva una sessione riporta VERO, altrimenti FALSO.

    Ecco un estratto del codice della pagina protetta:

    Codice PHP:
    session_start();
    require_once(
    'dbase.php');
    // Messaggi
    $lingua="it";
    if ( isset(
    $_SESSION['lng']) )
    {
        
    $lingua=$_SESSION['lng'];
    }
    if ( ISSET(
    $_GET['lng']))
    {
            
    $lingua=$_GET['lng'];
    }elseif(ISSET(
    $_POST['lng'])){
            
    $lingua=$_POST['lng'];
    }
    require_once(
    'lng/' $lingua'.php');
    include_once(
    'header_footer.php');
    include(
    'funzioni.php');
    if (!empty(
    $_SERVER['HTTP_REFERER'])) {
        
    $url =urlencode($_SERVER['HTTP_REFERER']);
    }else{
        
    $url=urlencode($_SERVER['REQUEST_URI']);
    }
    if (!
    checkLogin('1 2',$url)
    {
        
    header("Location: login.php);
        exit;
    }
    // parte da visualizzare 

    In remoto succede che viene visualizzata una pagina bianca in caso di FALSO. Se tolgo EXIT dopo l'header, viene visualizzata la parte protetta ma senza i dati dell'utente!

    Ripeto, in locale funziona tutto correttamente.

    Sapete dirmi dove è l'errore? E' una questione di versioni diverse di Apache/PHP, di configurazione,...?

    Questa è la funzione checkLogin() presente in funzioni.php:

    Codice PHP:
    function checkLogin($levels,$url)
    {
       global 
    $dbpref;
        
    $access False;
        if(!ISSET(
    $_SESSION['logged_in']))
        {
            
    $access False;
        } else {
            
    $kt split(' '$levels);
            
    $query mysql_query('
                     SELECT livello
                        FROM '
    .$dbpref.'giocatori
                        WHERE id_giocatore = "'
    .mysql_real_escape_string($_SESSION['user_id']).'"');
           if ( !
    $query )
            {
                 die (
    "Errore: ".mysql_error()." ".$query);
            }

            
    $row mysql_fetch_assoc($query);
            
    $access False;
            while(list(
    $key,$val)=each($kt))
            {
                if(
    $val==$row['livello'])
                {
                    
    // accesso permesso per almeno uno dei livelli chiesti
                    
    $access True;
                }
            }
        }
        return 
    $access;

    Grazie infinite!
    Nino

  2. #2
    Risolto!

    Il problema era nel file dbase.php di connessione al database.

    Poichè in genere lo preparo al momento dell'installazione del codice e non invio mai quello che uso in locale per paura di sostituire i dati con quelli locali, non mi sono accorto in questo caso che il file sul server iniziava con degli spazi, che come molti sanno impediscono l'invio di altri 'output'.

    Insomma ho perso una giornata per un "niente" (uno spazio)!


    Ciao,
    Nino

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.