Soy novato en PHP y tengo muchísimas dudas. Yo estoy haciendo un pequeño sitio web en el que incluyo un formulario de autentificación de usuarios. Al introducir los datos en el formulario y enviarlos, en el caso de que coinciden con los de la BD, el usuario se autentifica y le abro una sesión. El problema viene a la hora de propagar la sesión para poder comprobar si el usuario esta autentificado o no.
La estructura es:
Tengo 2 paginas: login.php y admin.php
Codigo pagina login.php
Cita:
Y el codigo de la pagina admin.php es:<?php
session_start();
if (!isset($_session['estado'])){
if (($_POST['correo']!="") and ($_POST['clave']!="")) {
header("Cache-control:private"); // IE 6 Fix
$correo=$_POST['correo'];
$clave=$_POST['clave'];
//Envio los datos a la function comprobar par aver si coinciden con los de la BD. Si coinciden devuelve “autentificado” sino “anónimo”.
$_session['estado']=comprobar($correo,$clave);
if ($_session['estado']=="autentificado") {
$msg="Bienvenido";
}else{
$msg='Acceso Denegado<br><a href="login.php">Volver</a>';
session_unset();
session_destroy();
}
}else{
session_destroy();
}
?>
<?php
function form_login(){
echo'
<form action="login.php" method="post">
<table>
<tr>
<td><span>Login de Usuario</span><br><br></td>
</tr>
<tr>
<td>E-mail<br /><input type="text" name="correo"></td>
</tr>
<tr>
<td>Clave<br /><input type="password" name="clave"></td>
</tr>
<tr>
<td><input id="boton_login" type="submit" name="enviar" value="Login" ></td>
</tr>
<tr>
<td style="text-align:center">[ <a href="recup_pass.php" title="¿Perdiste tu contraseña?">¿Perdiste tu contraseña? </a> | <a href="registro.php" title="¿Registro de Nuevo Usuario?">¿Registro de Nuevo Usuario?</a> ] </td>
</tr>
</table>
</form>';
}
function comprobar($correo,$clave){
include("conexion.inc");
//Establecemos la conexion con el Servidor
$IDconexion=mysql_connect("$servidor","$user","$pa sswd") or die ("ERROR");
//Seleccionamos la BD
mysql_select_db("gvsoftware",$IDconexion);
//Creamos la Consulta
$comprobarUsuario="SELECT * FROM registros WHERE correo='$correo' AND clave='$clave'";
//Ejecutamos la Consulta
$busqueda=(mysql_num_rows(mysql_query($comprobarUs uario,$IDconexion)));
//Comprobamos el Resultado
If ($busqueda!=0) {
return "autentificado";
}else{
return "anonimo";
}
//Cerrar la conexion con la BD
mysql_close($IDconexion);
}
?>
<?php
if (!isset($_POST['enviar'])) {
form_login();
}else{
if ($_session['estado']=="autentificado"){
echo '<table style="text-align:center"><tr><th>'.$msg.'</th></tr></table><br>';
echo '<table style="text-align:center"><tr><td>Panel de Administración</td></tr>';
echo '<tr><td><a href="admin.php?'.session_name().'='.session_id(). '"><img style="border:0" src="image/admin.png"></a></td></tr>';
echo '</table>';
}else{
echo '<table style="text-align:center"><tr><th>'.$msg.'</th></tr></table><br>';
}
}
?>
session_start();
if (!isset($_session['estado'])){
if (($_POST['correo']!="") and ($_POST['clave']!="")) {
header("Cache-control:private"); // IE 6 Fix
$correo=$_POST['correo'];
$clave=$_POST['clave'];
//Envio los datos a la function comprobar par aver si coinciden con los de la BD. Si coinciden devuelve “autentificado” sino “anónimo”.
$_session['estado']=comprobar($correo,$clave);
if ($_session['estado']=="autentificado") {
$msg="Bienvenido";
}else{
$msg='Acceso Denegado<br><a href="login.php">Volver</a>';
session_unset();
session_destroy();
}
}else{
session_destroy();
}
?>
<?php
function form_login(){
echo'
<form action="login.php" method="post">
<table>
<tr>
<td><span>Login de Usuario</span><br><br></td>
</tr>
<tr>
<td>E-mail<br /><input type="text" name="correo"></td>
</tr>
<tr>
<td>Clave<br /><input type="password" name="clave"></td>
</tr>
<tr>
<td><input id="boton_login" type="submit" name="enviar" value="Login" ></td>
</tr>
<tr>
<td style="text-align:center">[ <a href="recup_pass.php" title="¿Perdiste tu contraseña?">¿Perdiste tu contraseña? </a> | <a href="registro.php" title="¿Registro de Nuevo Usuario?">¿Registro de Nuevo Usuario?</a> ] </td>
</tr>
</table>
</form>';
}
function comprobar($correo,$clave){
include("conexion.inc");
//Establecemos la conexion con el Servidor
$IDconexion=mysql_connect("$servidor","$user","$pa sswd") or die ("ERROR");
//Seleccionamos la BD
mysql_select_db("gvsoftware",$IDconexion);
//Creamos la Consulta
$comprobarUsuario="SELECT * FROM registros WHERE correo='$correo' AND clave='$clave'";
//Ejecutamos la Consulta
$busqueda=(mysql_num_rows(mysql_query($comprobarUs uario,$IDconexion)));
//Comprobamos el Resultado
If ($busqueda!=0) {
return "autentificado";
}else{
return "anonimo";
}
//Cerrar la conexion con la BD
mysql_close($IDconexion);
}
?>
<?php
if (!isset($_POST['enviar'])) {
form_login();
}else{
if ($_session['estado']=="autentificado"){
echo '<table style="text-align:center"><tr><th>'.$msg.'</th></tr></table><br>';
echo '<table style="text-align:center"><tr><td>Panel de Administración</td></tr>';
echo '<tr><td><a href="admin.php?'.session_name().'='.session_id(). '"><img style="border:0" src="image/admin.png"></a></td></tr>';
echo '</table>';
}else{
echo '<table style="text-align:center"><tr><th>'.$msg.'</th></tr></table><br>';
}
}
?>
Cita:
El problema es que al parecer el valor de $_SESSION['estado'] se pierde. ¿Por que? ¿Son correctos mis scripts? <?php
session_start();
if ($_SESSION["estado"]!="autentificado"){
header("Location: login.php");
}
?>
session_start();
if ($_SESSION["estado"]!="autentificado"){
header("Location: login.php");
}
?>
Un saludo,
Valentin