Allora.
Rispondo alla tua prima domanda: DEVI utilizzare le sessioni, altrimenti i dati dell'utente non riesci a propagarli e quindi a controllare che ogni volta che viene selezionata una pagina, questo poi sia effettivamente chi ha il diritto di visualizzarla!
I metodi per fare una procedura solida di login sono molti, ti dico come farei io!
Prima del redirect alla pagina di amministrazione, puoi creare un identificativo univoco dell'utente.
Che ne so, potresti trasformare con MD5, il tempo di accesso alla pagina.
Quella stringa alfanumerica, la salvi nel DB e nella sessione, e per ogni pagina protetta da password, fai il controllo che esista la sessione, e che il valore contenuto nella stessa esista nel DB.
Io poi utilizzerei una tabella per gli utenti loggati, strutturata come segue:
codice:
ID - NOME_UTENTE - CODICE_UNIVOCO - DATA_LOGIN - DATA_LOGOUT
Nella pagina di login, prima di effettuare il redirect, non fai altro che creare un codice univoco, e andare a creare un rigo nella tabella utenti_loggati.
Mi spiego con un po' di codice:
Codice PHP:
if(mysql_num_rows($risultato) == 1) {
// creazione codice univoco per l'utente
$codice_utente = MD5(microtime());
// salvataggio del codice nella sessione
$_SESSION['codice_utente'] = $codice_utente;
// preparazione dati per inserimento e
// salvataggio dei dati nella tabella utenti_loggati
$nome_utente = funzioneFiltraggio($_POST['username']);
/* funzioneFiltraggio è una funzione personalizzata
* che ti creerai con tutte le possibili azioni per evitare
* inserimento di dati errati
* o tentativi di hacking */
$data_login = time();
$sql = "
INSERT INTO utenti_loggati
(nome_utente, codice_univoco, data_login)
VALUE
('$nome_utente', '$codice_utente', $data_login)
";
/* qui metti il codice di esecuzione
* della query e tutto il resto
* poi passi al redirect */
header("Location: ../userpage.php")
} else {
echo "User inesistente o digitazione errata";
}
Ho scritto al volo per cui potrebbe esserci qualche errore, ma l'importante è che capisci il meccanismo.
Per la tua seconda domanda, invece, se ti serve di gestire dei livelli di accesso, devi utilizzare una colonna in più nella tabella degli utenti del sito (quella che contiene nome e password per intenderci), dove vai ad inserire un riferimento al livello stesso.
Che ne so, puoi scriverci, admin, user o power_user, oppure dei codici numerici.
Nella query di accesso al sito - oltre a contare quanti record vengono restituiti, puoi fare la select per farti restituire il livello utente, da salvare nella tabella degli utenti loggati.
Mi spiego:
Codice PHP:
$sql = "
SELECT livello
FROM clienti
WHERE username='$username'
AND password='$password'
";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
$livello = mysql_result($query, 'livello', 0);
Naturalmente, anche la tabella degli utenti loggati deve avere un campo in più, livello appunto.
Per il resto funziona tutto come sopra.
Il redirect, poi, lo fai condizionato al livello utente.
Oppure, nelle pagine interne della tua applicazione, mandi a video delle pagine diverse in relazione al livello utente.
Nella sessione salva solo e sempre il codice univoco.
Nelle pagine protette, non fai altro che fare una query alla tabella utenti_loggati per il codice, e poi ti fai tornare tutte l info che ti necessitano.
L'argomento è molto vasto, e non è semplice da spiegare in un post come questo.... ma spero che ti possa avere dato degli spunti su cui lavorare.