No necesariamente.
Puedes generar una cadena única para cada sesión de tal forma que tu programa sepa si es un refresco de la página (F5) o bien un envío del formulario.
ejemplo:
Código PHP:
$idunico = uniqid();
// le metes el id al formulario:
echo "<input type=\"hidden\" name='token' value='$idunico' />";
if($_SESSION['mi_id'] == $_REQUEST['token']) {
// cargas los valores del formulario, es decir:
echo "<input ".blablabla." value='$tuvalor' />";
} else {
// lo cargas vacio y con el script de mi mensaje anterior (que repito, no se si funciona)
}