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