Foros del Web » Programando para Internet » PHP »

Sesiones en php

Estas en el tema de Sesiones en php en el foro de PHP en Foros del Web. Buenas noches, despues de googlear y buscar en foros los posibles errores que tengo en el código, no he conseguido dar con la tecla y ...
  #1 (permalink)  
Antiguo 27/02/2012, 18:29
 
Fecha de Ingreso: julio-2010
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Sesiones en php

Buenas noches,

despues de googlear y buscar en foros los posibles errores que tengo en el código, no he conseguido dar con la tecla y os voy a exponer aqui el codigo para ver si me podeis echar una mano.

Tengo 5 archivos, los cuales 2 son para insertar usuarios, el formulario y otro de creación. Estos dos van bien. El problema se presenta cuando intento hacer un logout del usuario que esta navegando. Lo primero esque solo existen 2 usuarios (no habra mas), el crear usuario esta deshabilitado.

En login.php

Código PHP:
<?
session_start
();
if(isset(
$_SESSION)){
header("location:user.php"); /* Si ha iniciado la sesion, vamos a user.php */
} else { 
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
?>
<html><head><title>Necesita identificación! </title></head>
<body>
<center><h1>Identificate! :D </h1></center>
<form action="file:///Macintosh HD/Users/ijnavas/Desktop/usuarios/comprueba.php" method="POST">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="pass"><br>
<input type="submit" value="Entrar">
</form>
</body></html>
<?
/* Y cerramos el else */ 
?>

En comprueba.php (comprobamos aqui los usuarios)

Código PHP:
<?
session_start
();
$server="ave"/* Nuestro server mysql */
$database="xxx"/* Nuestra base de datos */
$dbpass="xxx"/*Nuestro password mysql */
$dbuser="xxx"/* Nuestro user mysql */
/* Primero comprovamos que no existe un usuario con el mismo login ya registrado */

$login $_POST['login'];
$pass $_POST['pass'];

$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(
mysql_num_rows($result)==0){
echo 
"No existe el login introducido";
} else {
$array=mysql_fetch_array($result);
if(
$array["password"]==crypt($pass,"semilla") ){
/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
$_SESSION['prueba']='essto es una prueba';
$_SESSION["login"]=$login;
$_SESSION["nombre"]=$array["nombre"];
$_SESSION["apellidos"]=$array["apellidos"];
session_register("SESSION");
header("location:user.php");

} else {
echo 
"Password incorrecto!";
/* Cerramos este ultimo else */
/* Cerramos el else que corresponde a la comprobación de que el login existe */

?>

y por ultimo el user.php (la zona restringida)

Código PHP:
<?
session_start
();
if(!isset(
$_SESSION)){
header("location:login.php");
} else {
echo 
"<html><body>";
echo 
"Bienvenido ";
echo 
$_SESSION["nombre"]." ";
echo 
$_SESSION["apellidos"];
echo 
"<br>Has entrado con el nombre de ";
echo 
"klkl";
echo 
$_SESSION["login"];
echo 
$_SESSION['prueba'];
echo 
"<br>Para cerrar la sesión, pulsa: <a href='logout.php'>logout</a>";
echo 
"</body></html>";
}
?>
logout.php

Código PHP:
<?
session_start
();
if(!isset(
$_SESSION)){
header("location:login.php");
} else {
unset(
$_SESSION["SESSION"]); 
session_unset();
session_destroy();
echo 
"Las variables de sesión han sido eliminadas, y la sesión se ha dado por finalizada correctamente ;-)";
}
?>


que es lo que ocurre? que la sesion lleva abierta si como 8horas, he intentado cerrarla, destruirla, matarla, machacarla.... me falta pegarle un tiro o ponerle una bomba en el ordenador. no ha manera.

Tambien he hecho varias pruebas a la hora de pasar variables con las sesiones y no me funcionan, esto porque es?



Gracias por la ayuda!


PD: el codigo no es elaboracion propia, he modificado uno.
  #2 (permalink)  
Antiguo 27/02/2012, 18:49
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Sesiones en php

Hola, a lo mejor entiendo mal pero .. ¿esta es la parte de codigo en la que compruebas si el usuario ha iniciado sesión?

Cita:
session_start();
if(isset($_SESSION)) {...}
porque tengo que decirte que eso es siempre true , ya que precisamente lo que hace session_start() es habilitar el uso de esa variable $_SESSION. para comprobar si un usario ha iniciado sesion crea una variable en $_SESSION u asignale el nombre de usuario o el identificador

Cita:
$_SESSION['user'] = $user
cambia el codigo anterior por
Cita:
session_start();
if(isset($_SESSION['user'] ))
tal vez he entido mal tu código y no era eso lo que buscabas pero si es asi ... siempre compruebas si hay una sesion pero no si hay un usuario valido en ella. y por lo tanto siempre es true ya que antes de comprobar si el usuario es valido, la sesion es creada.
  #3 (permalink)  
Antiguo 27/02/2012, 19:07
 
Fecha de Ingreso: julio-2010
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Sesiones en php

Bien, al menos ya no me dice que esta siempre abierto, GRACIAS! no entendía muy bien lo del $_SESSION.

Ahora he cambiado todos los isset que tenia por lo que tu me has puesto, lo que pasa es que cuando meto un usuario y una contraseña validas (que existen en la BD) no se va a la pagina de user.php sino que se queda en login.php.

Voy a ver que puede pasar, sino pues ya escribire por aqui :)

gracias
  #4 (permalink)  
Antiguo 27/02/2012, 19:11
 
Fecha de Ingreso: julio-2010
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Sesiones en php

Si el problema ahora es que no se me pasan las variables con los $_SESSION.

pj. yo le quiero pasar el usuario que es, en el comprueba.php haria esto:

$_SESSION['login']=$login;


y en el user.php para imprimirlo pondría esto:

echo $_SESSION['user'];

sería asi? porque esque no me funciona
  #5 (permalink)  
Antiguo 27/02/2012, 19:14
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Sesiones en php

no , si el indice asociativo que usas en comprueba.php es 'login' en user php tambien debe ser 'login' porque si no, estas buscando el dato en una posicion de memoria distinta.

Cita:
$_SESSION['login'] = $login;
en comprueba.php

Cita:
echo $_SESSION['login']
en user.php
  #6 (permalink)  
Antiguo 27/02/2012, 19:24
 
Fecha de Ingreso: julio-2010
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Sesiones en php

claro.... es ya tarde y no veo esas cosas... lo dejare por hoy y mañana seguire, antes lo he comprobado y ya me va, me pasa perfectamente los valores por $_SESSION['xx']

muchas gracias:)) puedo dormir tranquilo

Etiquetas: formulario, html, mysql, sesiones, sql, variables, usuarios
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 18:17.