Mi problema es algo similar a la siguiente post ..Advertencia: No se puede modificar la información de cabecera - cabeceras ya enviado (PHP)
PHP error: Cannot modify header information – headers already sent
Pero en mi caso he elegido para iniciar la sesión una vez que determino que hay no hay errores de validación en el formulario de inicio de sesión y la información de inicio de sesión del usuario coincide con la de la base de datos. Aquí está el código siguiente:
página de entrada (antes de cualquier html)
session_name('username');
session_name('ip');
session_name('start');
session_start();
login.php fragmento (en el cuerpo de html)
} else {
$user = $_POST['username'];
$userpass = md5($_POST['password']);
$login_results = statement("select username, password from `$admin` where username='$user' and password='$userpass'");
if (mysql_num_rows($login_results)!= 1) {
$errmsg = "<span id='error'>Login failed: Username or password not on file</span>";
}else {
$_SESSION['username'] = "$user";
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
header("Location: index.php");
}
}
}
}
si nos fijamos en el bloque de los demás el código de arriba estoy verificando el inicio de sesión y si es bueno quiero asignar las variables de las sesiones y acceder a mi página de índice. Que tiene este código al principio:
//Session Timeout Script -- used to determine the amount of time the user has been idle. If it the user has been idle for longer then the session time, log the user out.
//Secondary to the Timeout Script, the username and ip address is checked for validility and if either fails redirect the user to the login page.
session_cache_expire(20);
session_start();
$inactive = 1200;
if(isset($_SESSION['start'])) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: logout.php");
}
}
$_SESSION['start'] = time();
$newip = $_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION['username']) || empty($_SESSION['username']) || $newip!= $_SESSION['ip']) {
header('Location: login.php');
}
Ahora lectura a través de la cuestión de que el autor anterior, se mencionó que la cabecera() debe ser el primero que se debe ejecutar en el código thats de envío de la redirección, que a su mi caso es login.php. Y hacer eso me permite iniciar sesión, pero cuando cierro la sesión estoy destruyendo todas mis sesiones y usando el encabezado() para enviarme de vuelta a la página de inicio de sesión. Lo cual a su vez hará que la página de inicio de sesión redirija a la página de índice porque es la primera línea de código leída. Hay alguna manera de evitar esto? así que no necesitaría repetir algo de la lógica de mi código que ya tengo en la parte superior de login.php?
Andre
Oh y una cosa más.Por lo que recuerdo, no puedes tener varias llamadas a la función header(). Cascading no es posible. – M2X
Bien leyendo nuevamente el error, afirma que la salida ya se envió a un archivo de inclusión que tengo antes de la ejecución de mi encabezado(). Ahora entré en ese archivo y eliminé el espaciado y ahora funciona GRACIAS ALOT M2X. – Andre
¡Claro! ; -] No te olvides de marcar la pregunta como respondida para otros que puedan encontrarse con esto. – M2X