non capisco, $_POST funziona solo nella pagina successiva, quando torna indietro $_POST è vuoto...
Se premi il pulsante "INDIETRO" del browser hai ragione, ma se ricarichi la pagina della form dopo aver fatto i controlli lato server allora il $_POST é pieno
.
Ma cosa succede se io disabilito javascript e inserisco del codice maligno che mi permette ad esempio di cancellare tutto il suo database?
Come tutte le brave persone ti premuri di non dare permessi di cancellazione/alterazione del database alle procedure ad accesso utente.
Certo, rimane il problema del fatto che si navighi con Javascript disabilitato ma penso che ormai siano in pochi a navigare in questa maniera... 
Per il problema principale io farei così (usando un po' di pseudocodice php):
Codice PHP:
<?
session_start(); //session_start() deve essere il primo comando, non lo puoi mettere dopo <html>
if (controlli()) header("location:pagina_accesso.php"); //come per session_start, il comando header dev'essere dato prima di aver emesso gli header html di pagina
?>
<html>
<head>
[...]
</head>
<body>
[...]
<form method="POST" action="questa_pagina_con_form.php">
<input type="text" name="campo1" value="<? echo $_POST["campo1"]; ?>" />
<form>
</body>
</html>
</body>
che ne dici? può andare?