Ciao,
entrambe le soluzioni vanno bene.
Personalmente utilizzo la seconda soluzione e funziona esattamente come hai detto tu:
l'utente inserisce l'username e password, lo script ne controlla l'esistenza e se esiste, crea una ( o più ) variabile all'interno della sessione ( ad esempio l'id utente ).
Una volta creata la sessione questa sarà attiva per tutte le pagine successivamente visitate dall'utente. Quindi inserirai nel tuo codice uno script che controlla l'esistenza della o delle variabili da te create nella sessione, es.:
Codice PHP:
define( SESSIONE, 'miaSessione' );
$userId = isset($_SESSION[SESSIONE]['id']) ? (int)$_SESSION[SESSIONE]['id'] : 0;
if($userId == 0){
// codice che va al login
}else{
// sezione protetta
}
Il cookie sul pc utente lo usi se vuoi fare in modo che l'utente si possa connettere in automatico alle visite successive.
Non ho trattato tutte le problematiche di sicurezza che sono sicuro che andrai a vederti 
Ciao