Non c'e' un modo "migliore", c'e' un modo corretto.

Per esempio nel tuo script, prima recuperi i dati da POST "poi" controlli se i dati esistono addirittura "dopo" aver fatto la query. Cambia l'ordine:

prima controlla se POST e' valorizzato, poi farai la query. Come contenuto: chi e' che decide se l'utente e' attivo? L'utente stesso? Se e' un dato nel db che ci fa in POST?

Sarebbe poi opportuno che la password nel db fosse "hashata", cioe' non in chiaro per evidente ragioni di privacy e sicurezza.

In caso di autenticazione riuscita invialo direttamente alla pagina senza farlo cliccare sul link.... e assicurati che almeno in fase di debug, di avere abilitato sia i NOTICE e sopratutto la stampa degli errori, altrimenti devi andare al buio a cercare i tuoi problemi. Per esempio potrebbe anche non essere corretto il path o assente la cartella dove scrivere il file di sessione....