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:
Grazie infinite!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;
}
Nino

Rispondi quotando