Foros del Web » Programando para Internet » PHP »

propagacion sesiones en php

Estas en el tema de propagacion sesiones en php en el foro de PHP en Foros del Web. Buenos Días, 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 ...
  #1 (permalink)  
Antiguo 31/05/2007, 13:14
 
Fecha de Ingreso: abril-2007
Mensajes: 40
Antigüedad: 17 años
Puntos: 0
propagacion sesiones en php

Buenos Días,

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:
<?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&ntilde;a?">¿Perdiste tu contrase&ntilde;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&oacute;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>';
}
}
?>
Y el codigo de la pagina admin.php es:

Cita:
<?php
session_start();
if ($_SESSION["estado"]!="autentificado"){
header("Location: login.php");
}
?>
El problema es que al parecer el valor de $_SESSION['estado'] se pierde. ¿Por que? ¿Son correctos mis scripts?

Un saludo,

Valentin
  #2 (permalink)  
Antiguo 31/05/2007, 13:19
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Re: propagacion sesiones en php

Error: $_session['estado']=comprobar($correo,$clave);

Los arreglos superglobales son todos con mayúsculas ($_POST, $_GET, $_SESSION, etc).
Si usas minusculas PHP "cree" que es otra variable, dado que es case-sensitive.

Debes usar siempre $_SESSION['estado']
  #3 (permalink)  
Antiguo 01/06/2007, 05:43
 
Fecha de Ingreso: abril-2007
Mensajes: 40
Antigüedad: 17 años
Puntos: 0
Re: propagacion sesiones en php

Muchas Gracias por contestar. Ya he corregido el fallo y parece que va bien. Ahora el problema que tengo es a la hora de cerrar la sesión.

-Cuando intento autentificarme y los datos no son correctos no me abre una sesion.
-Cuando intento autentificarme y los datos son correctos me abre una sesion y por tanto puedo acceder a la pagina admin.php. Pero al volver a autentificarme y poner los datos mal (para comprobar si me borra/vacia las variables de sesion) resulta que sigo con la sesion y puedo acceder a la pagina admin.php.

El código de comprobación (de la pagina login.php) para saber si el usuario esta autentificado o no para saber si le cierro o no la sesión es:

Cita:
<?php
session_start();

//Compruebo si la variable de sesion esta declarada
if (!isset($_SESSION['estado'])){

//Comprobar si los datos se envian a traves del formulario de Login
if (isset($_POST['enviar'])) {
header("Cache-control:private"); // IE 6 Fix
$correo=$_POST['correo'];
$clave=$_POST['clave'];

//Compruebo los datos con los de la BD
$_SESSION['estado']=comprobar($correo,$clave);

//Si los datos coinciden le asigno un valor a la variable de sesion
if ($_SESSION['estado']=="autentificado") {
$msg="Bienvenido";
}else{
$msg='Acceso Denegado<br><a href="login.php">Volver</a>';
session_destroy();
}
}else{

//Como los datos no son enviados a traves del formulario cierro la sesion
session_destroy();
}
}else{

//Al existir ya la variable $_SESSION['estado'] compruebo si tiene almacenado el valor "autentificado"
if ($_SESSION['estado']!="autentificado") {
session_destroy();
}
}

?>
El codigo de la pagina admin.php sigue siendo el mismo. Me vendría bien algún enlace avanzado sobre sesiones.

Un Saludo,

Valentin
  #4 (permalink)  
Antiguo 01/06/2007, 10:50
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Re: propagacion sesiones en php

Código PHP:
...
else{

//Como los datos no son enviados a traves del formulario cierro la sesion
unset($_SESSION); //"mato" la variable de sesion
session_destroy();
}
... 
  #5 (permalink)  
Antiguo 01/06/2007, 13:38
 
Fecha de Ingreso: abril-2007
Mensajes: 40
Antigüedad: 17 años
Puntos: 0
Re: propagacion sesiones en php

He puesto unset($_SESSION); y nada, sigue igual. Yo creo que al final es un problema del script que he creado, es decir, la estructura, la forma de verificar las cosas. En mi maquina tengo instalado el wamp (con register_globals a off) ¿Alguna sugerencia?

Un Saludo y Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:57.