Io uso questa logica:

Nel form di pagina 3 visualizzo i campi del form e nel campo Value metto il valore della variabile di sessione ke mi tiene traccia del valore eventualmente inserito.

Alla fine della pagina 3 faccio un unset di tutte le variabili di sessione utilizzate nella pagina corrente.

Quando faccio il submit del form, vado a pagina 4. Qui per prima cosa inserisco tutte le variabili inviate via POST, nella SESSIONE. Se nell'effettuare i controlli c'è un qualche errore, immediatamente ritorno alla pagina 3 con il comando
header("Location: ..../pagina3.php");
exit;

In tal modo le variabili di sessione sono ancora presenti e vengono inserite nel form, a fine pagina 3, poi, vengono eliminate così quando viene visualizzata la pagina 3 e tu decidi di cambiare pagina, le variabili di sessione non ci sono +.

Ritorniamo alla pagina 4: se i controlli vanno a buon fine, fai quello ke devi fare e a fine pagina4 elimina tutte le variabili di sessione create ad inizio pagina.

Spero di essere stato chiaro e di aver capito.