Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/11/2007, 13:07
miguelangelb
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Exclamación Se pierde la información de la sesión PHP

Hola, tengo un problema con las sesiones y la verdad no encuentro qué puede estar pasando... El Usuario ingresa correctamente (valida sus claves ) , empieza el recorrido por la página correctamente, y de pronto de manera intempestiva se pierde la información de la sesión y lo saca de la navegación que efectuaba!

El php.ini en el servidor actualmente está configurado así:
session.auto_start = 0 (en cada script llamo la funcion "session_start")
session.use_trans_sid = 0 (estoy enviando manualmente en cada link el .SID)
register_globals = On
short_open_tag = On
session.save_path = /tmp
session.gc_maxlifetime = 4320

1) el ingreso al sitio WEB se hace así en la página “login.php” despúes de recibir por “post” la información requerida:

<?PHP
include_once (dirname(__FILE__). "/../nwlib/dbusuario.inc.php");

if (isset($HTTP_POST_VARS)) {
$usuario = new DBusuario();
$usuario->id = 0;
$usuario->login= $HTTP_POST_VARS['login'];
$usuario->password = $HTTP_POST_VARS['password'];
$usuario->connect();
$usuario->verificarUsuario();

// si el usuario existe, valida el ingreso!

if ($usuario->id!=0) {
session_start();
$_SESSION['_userid']=$usuario->id;
$redirect="pagina_principal.php?".SID;
header("Location: ./$redirect");
} else {
?>
<script>
alert ("Clave Erronea! Inténtelo de Nuevo.");
history.back();
</script>
<?PHP
}
}
?>

2) En la “pagina_principal.php” cargamos la información básica del usuario así:
<?PHP
session_start();

//validamos que sea el Usuario que ingresó.

if (!(isset($_SESSION['_userid']))) {
?>
<script language="JavaScript" type="text/javascript">
alert("Acceso no autorizado.");
history.back()
</script>
<?PHP
die();
}

//Traemos la información de su registro a partir de:

include_once (dirname(__FILE__). "/../nwlib/dbusuario.inc.php");

$usuario= new DBusuario();
$usuario->connect();
$usuario->id=$_SESSION['_userid'];
$usuario->find ();
?>

Hasta éste punto no hay problema, acá es donde empieza:
La “página_principal.php” ( y todas las visibles al usuario tienen en su parte superior un menú desplegable creado con Fireworks insertado en el PHP a manera de etiquetas CSS)

Los links para navegar en éstas etiquetas los tengo configurados así:
mm_menu_0828201440_0.addMenuItem("Ciudades&nbsp;HO Ms&nbsp;Presenciales","location='cities.php?<?=SID ?>'");

El link aparentemente funciona bien ya que éste trae correctamente la página “cities.php” (el código es éste:)

<?PHP
include_once (dirname(__FILE__). "/../nwlib/dbciudad.inc.php");
include_once (dirname(__FILE__). "/../nwlib/dbpais.inc.php");
include_once (dirname(__FILE__). "/../nwlib/dbusuariodata.inc.php");

$usuariodata= new DBusuariodata();
$usuariodata->connect();
$usuariodata->usuarioid=$_SESSION['_userid'];
$usuariodata->find();

// Carga correctamente la información de las ciudades que el usuario tiene almacenada

?>

//Una vez en cities.php puedo imprimir la información de la sesión mediante (echo .sessionid(); o echo $_SESSION['_userid'];)

Desde ésta “cities.php” el usuario tiene básicamente tres opciones:
a) Agregar ciudades, para o cual llamo la página “citiesresult.php” mediante un botón que envía el siguiente formulario así:
<form action="citiesresult.php" method="post" name="ciudades" >
//Acá envío manualmente el SID
<input type="hidden" name="SID" value="<?=SID?>" >
b) Borrar ciudades, para lo cual llamo la página “delcity.php” mediante un link escrito que envía la información por GET así:
<a href='delcity.php?usuarioid=<?PHP echo $usuariodata->usuarioid; ?>&ciudadid=<?PHP echo $ciudad->id ?>&<?=SID?>' ">
c) O continuar la navegación a la siguiente página de datos varios botones (dependiendo lo que usuario quiera hacer) que envían el siguiente formulario así:
<form action="citiesquery.php" method="post">
<input type="hidden" name="SID" value="<?=SID?>" >

En la página citiesquery.php se recibe la información por el metodo “post”:
<?PHP
session_start();
//Sale del sitio WEB
if (isset($HTTP_POST_VARS['sale'])) {
header ("Location:logout.php");
}
//Regresa a la “pagina_principal.php”
if (isset($HTTP_POST_VARS['continua'])) {
header ("Location: pagina_principal.php?".SID);
}
//continúa la navegación a la siguiente página de datos. (
Esta página en su código es igual a cities.php ( y en general a todas las de información del Usuario)
if (isset($HTTP_POST_VARS['sigue'])) {
header ("Location:tools.php?".SID);
}
?>

Tanto en la página “cities result.php” del punto a), como en la “delcity.php” del punto b) y en la “tools.php” al igual que se hizo en la “página_principal.php” se carga valida el acceso y se carga la información del Usuario mediante:

if (!(isset($_SESSION['_userid']))) {
?>
<script language="JavaScript" type="text/javascript">
alert("Acceso no autorizado.");
history.back()
</script>
<?PHP
die();
}

//Traemos la información de su registro a partir de:

include_once (dirname(__FILE__). "/../nwlib/dbusuario.inc.php");

$usuario= new DBusuario();
$usuario->connect();
$usuario->id=$_SESSION['_userid'];
$usuario->find ();
?>

*EL PROBLEMA QUE TENGO ES QUE “ALEATORIAMENTE” CUANDO ESTOY NAVEGANDO EL SITIO WEB EN CUALQUIERA DE LAS PAGINAS DE a), b) o c) INTEMPESTIVAMENTE PIERDE LA $_SESSION['_userid']; Y EJECUTA (NO UNA SINO VARIAS VECES (3, 4 Y HASTA 5 VECES) la segunda parte del script “alert("Acceso no autorizado.");

Ojalá aguien me ayude a detectar que problema se está presentando o en el código, on en la configuración del php.ini o bien en la MANERA DE PROPAGAR EL .SID

Última edición por miguelangelb; 30/11/2007 a las 15:42