Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/08/2005, 16:35
orion79
 
Fecha de Ingreso: febrero-2005
Mensajes: 5
Antigüedad: 19 años, 3 meses
Puntos: 0
AYUDA!!!!!! Problema al cambiar el ID de una sesión..

Buenas. Tengo días echandole coco a esto y no logro entender qué está pasando y por ende no sé como solucionarlo. Agradeceré enormemente a quien me pueda echar una mano.


EL PROBLEMA ES EL SIGUIENTE:

Imaginemos que tengo 5 paginas PHP:

pagina1.php
pagina2.php
pagina3.php
pagina4.php
verifica.php

"En palabras": En la pagina1.php tengo un formulario de autentificacion donde el usuario mete su login y su password para entrar en un área restringida.

En la pagina2.php tengo un script que verifica si el login y el password ingresados son válidos.. "Como no estoy usando Base de Datos" y requiero poder autentificar a varios usuarios cada uno con nombre de usuario y password diferentes, el código "para dos usuarios" es algo así:

pagina2.php

<?

if ($_POST["usuario"]=="persona1" && $_POST["contrasena"]=="1234") {

header("Location: pagina3.php?usuario=persona1"); }

else if ($_POST["usuario"]=="persona2" && $_POST["contrasena"]=="4321") {

header("Location: pagina3.php?usuario=persona2"); }

else {

header("Location: pagina1.php?errorusuario=si"); }

?>

( Si el usuario y la contraseña son correctos, con los header redirecciono a la pagina3.php pasando por la URL la variable usuario con el nombre del usuario )

Bien en la pagina3.php

Lo que tengo es un script y lo que deseo con el mismo es lograr que dos usuarios no puedan ingresar simultáneamente al área restringida con el mismo login y password... es decir.. si un usuario ya ingresó con el nombre de usuario=persona1 y contraseña=1234... hasta tanto este no termine su sesion, nadie se pueda conectar usando esos mismos datos:

pagina3.php

<?
// Recojo la variable que viene por la URL de pagina2.php con el nombre de usuario con el que se acaban de conectar

$usuario=$_GET['usuario'];

// Verifico si ya existe un fichero de sesion cuyo id sea dicho nombre de usuario

if (file_exists("../../../tmp/sess_".$usuario)) {

// Si el archivo existe es porque alguien ya entro al sistema con ese nombre de usuario y password y se creo una sesion cambiando el id de la sesion al nombre de usuario, redirijo a la persona a la pagina de ingreso ya que no quiero que entre.

header ("Location: pagina1.php");

// Si el archivo no existe, significa que es la primera vez que se esta ingresando al sistema con dicho nombre de usuario y contraseña entonces procedo a iniciar una sesion, a cambiarle el id colocandole como id el nombre de usuario, creo una variable de sesion y redirijo a la persona a la página principal de mi zona restringida llamada pagina4.php

}
else {
session_start();
session_id($usuario);
$_SESSION['autentificado']="SI";

header ("Location: ../area_segura/usuarios/pagina4.php");

}
?>

Por último,

En la pagina4.php imaginemos que tengo una mensaje de bienvenida: Hola! has ingresado en el área restringida. Con el detalle que al principio de todo he colocado un include de un script que me verifica si la persona que llego a esta pagina ha iniciado la variable de sesion "autentificado" y si el valor de la misma es "SI"....$_SESSION['autentificado']="SI";.. lo cual se hizo en pagina3.php... el código del include es: <?include ("verifica.php");?> y el codigo de verifica.php es el siguiente:

<?
session_start();

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: ../../../seguridad/pagina1.php");
//ademas salgo de este script
exit();
}
?>

EL PROBLEMA EN SI ES QUE A PESAR DE QUE HE COMPROBADO DE QUE CUANDO ME VOY A CONECTAR POR PRIMERA VEZ CON UN LOGIN Y UN PASSWORD.. EFECTIVAMENTE SE ME CREA LA SESION, DE QUE EFECTIVAMENTE TOMA EL CAMBIO DE ID QUE LE HAGO Y DE QUE LA VARIABLE DE SESION auntentificado SE CREA.. AL COLOCAR EL LOGIN Y EL PASSWORD CAIGO EN LA MISMA PAGINA EN LA QUE ESTOY INTRODUCIENDO LOS DATOS pagina1.php Y NO PASA NADA.. NO LOGRO PASAR DE ALLI. Sin embargo.. cuando elimino la linea que le cambia el ID a la sesion.. todo funciona bien y logro entrar al área segura... pero evidentemente esto no me permite hacer lo que quiero hacer de no permitir el ingreso de dos personas con el mismo login y password al mismo tiempo.

HE HECHO Y PROBADO DE TODO Y NADA... NO SE QUE PASA... ES COMO SI AL CAMBIAR EL ID A LA SESION QUE INICIO.. EL CODIGO DE verifica.php NO PUDIESE VER LA VARIABLE autentificado QUE HA SIDO CREADA POR LO CUAL ME REDIRECCIONA A pagina1.php

Si algiuen se le ocurre qué es lo que puede estar pasando y cómo solucionarlo... se lo agradeceré enormemente.. ya estoy mentalmente agotado..

SALUDOS...