Os dejo un chorizo considerable de codigo, que no funciona.
Las ramas del if que funcionan con las cookies activadas funcionan a la perfeccion, pero las que funcionan con la variable $_SESSION, no me pasa los valores de una pagina a otra.
index.php
Código PHP:
<?php
echo "-".$_SESSION['user']."-".$_SESSION['pass']."-";
//Guardamos el formulario de login en una variable
$formulario = '<form id="login" action="login.php" method="post">'.
'<strong>Nombre Usuario: </strong>'.
'<input type="text" name="user" maxlength="15" />'.
' '.
'<strong>Contraseña: </strong>'.
'<input type="password" name="pass" maxlength="25" />'.
' '.
'<input type="submit" value="Enviar"/>'.
'</form>';
//Si existen cookies, guardamos su contenido
if (isset($_COOKIE['porraF1user']) && isset($_COOKIE['porraF1pass'])){
$user = $_COOKIE['porraF1user'];
$pass = $_COOKIE['porraF1pass'];
$conexion = mysqli_connect('localhost', 'user', 'pass', 'BDD');
$consulta = mysqli_query($conexion, "SELECT Password FROM t_usuarios WHERE Nick='$user'");
if ($consulta){
$resultado = mysqli_fetch_assoc($consulta);
if ($resultado['Password'] == $pass){
echo "Bienvenido <strong>$user</strong>";
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
}
else{
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
echo $formulario;
//Borramos las cookies incorrectas
setcookie('porraF1user', 'error', time()-3600);
setcookie('porraF1pass', 'error', time()-3600);
}
}
else{
//Error en la conexion
//La consulta fallo. Mostramos pantalla de error y mandamos al index despues de unos segundos
echo '<pre class="error">Error en la conexion con la Base de Datos</pre>';
}
}
elseif(isset($_SESSION['user']) && isset($_SESSION['pass'])){
//Aqui va el caso de que la sesion este iniciada y no tengamos cookies
$user = $_SESSION['user'];
$pass = $_SESSION['pass'];
$conexion = mysqli_connect('localhost', 'user', 'pass', 'BDD');
$consulta = mysqli_query($conexion, "SELECT Password FROM t_usuarios WHERE Nick='$user'");
if ($consulta){
$resultado = mysqli_fetch_assoc($consulta);
if ($resultado['Password'] == $pass){
echo "Bienvenido <strong>$user</strong>";
}
else{
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
echo $formulario;
//Borramos las cookies incorrectas
setcookie('porraF1user', 'error', time()-3600);
setcookie('porraF1pass', 'error', time()-3600);
//Y borramos la de error para proximas cargas
setcookie('porraF1error', 'error', time()-3600);
}
}
}
elseif(isset($_COOKIE['porraF1error'])){
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
echo $formulario;
//Borramos la cookie de error para futuras cargas de la pagina
setcookie('porraF1error', 'error', time()-3600);
//Tambien borramos posibles cookies de usuari y pass
setcookie('porraF1user', 'error', time()-3600);
setcookie('porraF1pass', 'error', time()-3600);
//Destruimos la sesion
session_destroy();
}
elseif(isset($_SESSION['error'])){
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
echo $formulario;
//Borramos las cookies incorrectas
setcookie('porraF1user', 'error', time()-3600);
setcookie('porraF1pass', 'error', time()-3600);
//Borramos la cookie de error para futuras cargas de la pagina
setcookie('porraF1error', 'error', time()-3600);
//Destruimos la sesion
session_destroy();
}
else{
//No existen las cookies ni sesion, mostramos form de login
echo $formulario;
}
?>
login.php Código PHP:
<?php
//Conectamos con la BDD
$conexion = mysqli_connect('localhost', 'user', 'pass', 'BDD');
if (!$conexion){
//Error en la conexion
}
else{
//Guardamos los valores del formulario
$user = $_POST['user'];
$pass = $_POST['pass'];
$consulta = mysqli_query($conexion, "SELECT Password FROM t_usuarios WHERE Nick='$user'");
//Guardamos los datos en la BDD
if ($consulta){
$resultado = mysqli_fetch_assoc($consulta);
if ($resultado['Password'] == $pass){
//Creamos una cookie con 90 dias de duracion
setcookie('porraF1user', $user, time()+7776000);
setcookie('porraF1pass', $pass, time()+7776000);
//Y borramos la de error en caso de existir
setcookie('porraF1error', 'error', time()-3600);
//Y además creamos variables de sesion por si el usuario tiene las cookies desactivadas
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
}
else{
//El usuario y la contraseña no se corresponden. Destruimos las cookies
setcookie('porraF1user', $user, time()-3600);
setcookie('porraF1pass', $pass, time()-3600);
//Y creamos otra para mostrar mensaje de error
setcookie('porraF1error', 'error', time()+180);
//Creamos tambien una variable de error de sesion
$_SESSION['error'] = 'error';
}
//Mandamos al index
header('location: index.php');
}
else{
//Error en la consulta
}
}
ob_end_flush();
?>
En ambos casos, en las primeras lineas, antes del doctype pongo esto:
Código PHP:
<?php
//Abrimos el buffer
ob_start();
//Iniciamos sesion
session_start();
?>
Cuando envio el formulario, llamo al login, que despues de crear las cookies y guradar las variables de sesion, vuelve al index, el cual segun si existen cookies (estan activadas) o no (no lo estan) trata de una manera y otra la sesion.
El problema es que los valores de sesion que asigno en login.php no los puedo recuperar en index.php, porque es otra sesion diferente. Con otras pruebas que hice con paginas sencillas no se me presentaba este error.
Alguna sugerencia?
Muchas gracias