Ciao a tutti,
In questi giorni mi è capitato una cosa strana e non capisco da cosa dipende.
Mi è stato chiesto di aggiungere alcune sezioni ad un sito già creato (ver PHP 5.2.5). Dato che il sito è alquanto vecchio ho dato una sistemata al sistema di autenticazione.In pratica in ogni pagina veniva fatto
un
session_register($username);
session_register($password);
e si controllava se erano settate.
Io ho invece cambiato con l'uso del classico $_SESSION (rimovendo i session_register)
e fatto una funzione che verifica se l'utente è loggato e se ha il ruolo giusto, da richiamare nelle pagine di amministrazione:Codice PHP:
login.php
...
if(username e passwd sono nel db){
$_SESSION['user'] = $row; //la riga del db;
}
Tutto sembrava funzionare per il meglio, ma in una pagina php di amministrazione $_SESSION['user'] veniva cambiata (portando a fallire il login se si cambiava pagina)Codice PHP:
function requireRole($roles = array('admin')){
if(!isset($_SESSION['user']))
return false;
if(!in_array($_SESSION['user']['role'], $roles))
return false;
return true;
}
Ho scoperto che il codice in questione era:
$user = mysql_fetch_assoc($query);
infatti, cambiando nome alla variabile $user la variabile $_SESSION['user'] non veniva toccata.
Qualcuno mi sa spiegare questa relazione tra $user e $_SESSION['user'] ? io proprio non ci arrivo![]()