Gracias dopon,

, parece que he conseguido que funcione con la idea que tu me diste de quitar el session_start(); del inicio y ponerlo después de la validación, más 1 ultimo select para crear las nuevas sesiones, tal que así
Código PHP:
<?
include("conexion.php");
$tabla="usuarios";
$tabla1="comunicaciones";
$usuario_actual=trim($_POST["usuario_actual"]);
$contrasena_actual=trim($_POST["contrasena_actual"]);
$correo_actual=trim($_POST["correo_actual"]);
$nombre=trim($_POST["nombre"]);
$apellidos=trim($_POST["apellidos"]);
$domicilio=trim($_POST["domicilio"]);
$cp=trim($_POST["cp"]);
$localidad=trim($_POST["localidad"]);
$provincia=trim($_POST["provincia"]);
$centro=trim($_POST["centro"]);
$telefono=trim($_POST["telefono"]);
$correo=trim($_POST["correo"]);
$usuario=trim($_POST["usuario"]);
$contrasena=trim($_POST["contrasena"]);
$repita_contrasena=trim($_POST["repita_contrasena"]);
// una vez recogidas todas las variables enviadas mediante POST
// comenzamos a validar el formulario
if(!empty($nombre)&&!empty($apellidos)&&!empty($correo)&&!empty($usuario)&&!empty($contrasena)&&!empty($repita_contrasena)){
if(is_numeric($cp)){
if(strlen($cp)==5){
if(is_numeric($telefono)){
if(strlen($telefono)>=7){
if(ereg("^([a-zA-Z0-9_\.-]+)\@([a-zA-Z0-9\.-]+)\.([a-zA-Z]{2,4})$",$correo)){
if(strlen($usuario)>=6){
if(ereg("^[a-zA-Z0-9_\.-]+$", $usuario)){
if(strlen($contrasena)>=6){
if(ereg("^[a-zA-Z0-9_\.-]+$", $contrasena)){
if($repita_contrasena==$contrasena){
// una vez validado el formulario actualizamos el registro de usuario
$sql="UPDATE $tabla SET nombre='$nombre', apellidos='$apellidos', domicilio='$domicilio', cp='$cp', localidad='$localidad', provincia='$provincia', centro='$centro', telefono='$telefono', correo='$correo', usuario='$usuario', contrasena='$contrasena' WHERE usuario='$usuario_actual' && contrasena='$contrasena_actual'";
mysql_query($sql, $conexion) or die("error en la consulta $sql ".mysql_error());
// una vez actualizado el registro de usuario actualizamos los registros de la tabla comunicaciones que comparte campos con la tabla de usuarios
$autor_nuevo=$nombre." ".$apellidos;
$sql="UPDATE $tabla1 SET usuario='$usuario', autor='$autor_nuevo', centro='$centro', correo='$correo' WHERE usuario='$usuario_actual' && correo='$correo_actual'";
mysql_query($sql, $conexion) or die("error en la consulta $sql ".mysql_error());
// una vez actualizaos las 2 tablas y creamos las sesiones de usuario nuevas
$sql="SELECT * FROM $tabla WHERE usuario='$usuario' AND contrasena='$contrasena'";
$resultado=mysql_query($sql, $conexion) or die ("Error en la consulta, MySQL dice: ".mysql_error());
if($encontrados=mysql_fetch_array($resultado)){
session_start();
$_SESSION["autenticado"]="si";
$_SESSION["usuario"]="{$encontrados['usuario']}";
$_SESSION["contrasena"]="{$encontrados['contrasena']}";
$_SESSION["domicilio"]="{$encontrados['domicilio']}";
$_SESSION["cp"]="{$encontrados['cp']}";
$_SESSION["localidad"]="{$encontrados['localidad']}";
$_SESSION["provincia"]="{$encontrados['provincia']}";
$_SESSION["centro"]="{$encontrados['centro']}";
$_SESSION["telefono"]="{$encontrados['telefono']}";
$_SESSION["correo"]="{$encontrados['correo']}";
$_SESSION["nombre"]="{$encontrados['nombre']}";
$_SESSION["apellidos"]="{$encontrados['apellidos']}";
}
// una vez actualizados los registros redireccionamos al formulario editar el registro
header("Location:modificar_registro.php?mensajegeneral=1");
// si repita contraseña no contiene la misma cadena que contraseña
}else{
header("Location:modificar_registro.php?mensajerepitacontrasena=0");
}
// si la contraseña ingresada contiene caracteres inválidos
}else{
header("Location:modificar_registro.php?mensajecontrasena=0");
}
// si la contraseña ingresada contiene menos de 6 caracteres
}else{
header("Location:modificar_registro.php?mensajecontrasena=1");
}
// si el nombre de usuario ingresado contiene caracteres inválidos
}else{
header("Location:modificar_registro.php?mensajeusuario=1");
}
// si el nombre de usuario ingresado contiene menos de 6 caracteres
}else{
header("Location:modificar_registro.php?mensajeusuario=2");
}
// si el correo ingresado contiene caracteres inválidos
}else{
header("Location:modificar_registro.php?mensajecorreo=1");
}
// si el telefono ingresado contiene menos de 7 caracteres
}else{
header("Location:modificar_registro.php?mensajetelefono=0");
}
// si el telefono ingresado no es un número
}else{
header("Location:modificar_registro.php?mensajetelefono=1");
}
// si el código postal ingresado no tiene 5 caracteres
}else{
header("Location:modificar_registro.php?mensajecp=0");
}
// si el código postal ingresado no es un número
}else{
header("Location:modificar_registro.php?mensajecp=1");
}
// si no se han rellenado todos los cammpos del formulario
}else{
header("Location:modificar_registro.php?mensajegeneral=0");
}
mysql_free_result($resultado);
mysql_close($conexion);
?>
lo que no me explico muy bien es porque funciona..., si quito el session_start(); del inicio no se deberían dejar de propagar las sesiones y por lo tanto perderlas??? y si se pierden como consiguo después que el formulario las cargue de nuevo cuando al validar da error y el script redirecciona de nuevo al formulario?? podrías explicarmelo por favor.
Un saludo. GRACIAS.