Bueno .. el mensaje es normal .. Eso es ocasionado por la configuración de sesiones. Por defecto PHP usa cabeceras "no-cachè" para las sesiones. Eso lo define: session.cache_expire en tu php.ini (por defecto dice "no cache" o similar).
Tienes varias soluciones:
Rápidas pero no "ortodoxas"
1) Usa método GET en lugar de POST en tus formularios
2) No forzar "no caché" en session.cache_limiter (se puede hacer con funciones como session_cache_limiter() y/o por ini_set() ademas de con .htaccess).
Lógica:
Tu formulario envia datos a "procesar.php" .. este valida .. si hay algún error el mensaje de error NO se presenta en procesar.php sino que se devuelve al formulario automáticamente y ahí es donde se debe mostrar el mensaje de error (o bien en una página intermedia pero nunca donde envies tu formulario en el action= ... del form)
Para la redirección automática puedes usar:
header("Location: formulario.php");
exit;
Y si hay error .. puedes usar una variable de control tipo:
Código PHP:
header("Location: formulario.php?cod=error");
exit;
y en tu formulario .. esa variable "cod" la usas como control para mostrar o no el mensaje de error correspondiente:
Código PHP:
if (isset($_GET['cod'])){
if ($_GET['cod']=="error"){
echo "hay errores en el formulario .. reviselos";
}
}
Usa más variables .. o códigos numericos/etc . para identificar el error concreto que se produció (ejemplo: tal campo no tiene valor ..)
Un saludo,