Osservando gli script che hai riportato si vede che in realtà non usi le sessioni per ricordarti se un utente è loggato oppure no.
Infatti nel primo script effettui un controllo sui valori $_POST['usr'] e $_POST['pwd'], che in teoria dovrebbero provenire da un form riempito dall'utente. Questi valori li confronti con dei valori presenti nel file nomi.txt
Questa procedura viene ripetuta ad ogni accesso alla pagina, pertanto le sessioni nel controllo delle credenziali dell'utente non vengono mai interpellate. E' vero che memorizzi nome utente e password nelle sessioni, ma poi non li usi.
Lo script per il log-out è corretto (anche se non servono le istruzioni header) ma siccome il tuo sistema di autenticazione non sfrutta affatto le sessioni, il log-out non ha effetto!
Inoltre spingendo il bottone "indietro" del browser, è come se reinvii le informazioni di autenticazione (ecco il perché di quell'avviso del browser a proposito dei dati POST) e quindi è come se ti riautentichi.
Le cose che devi fare sono:
1) fare in modo che lo script che verifica nome utente e password, indipendentemente dall'esito del login, reindirizzi subito l'utente ad una ulteriore pagina con un
header('location: nuova_pagina.php');
questo ti eviterà il problema della riautenticazione automatica se si preme "indietro"
2) se il login va bene devi memorizzare in sessione anche solo il nome utente, se va male il nome utente rimane una stringa vuota $_SESSION['nome_utente'] = '';
3) in tutte le pagine private devi mettere un controllo sui dati di sessione, verificando ad esempio che il nome utente non sia una stringa vuota
if($_SESSION['nome_utente'] != '')
Non serve memorizzare la password dell'utente.
Nota che la pagina che effettua il login (sia quella che crea il form da visualizzare, sia quella che controlla i dati immessi) non sono pagine private, pertanto nessun controllo sui dati di sessione va fatto.
:bye: