Foros del Web » Programando para Internet » PHP »

Se pierde la información de la sesión PHP

Estas en el tema de Se pierde la información de la sesión PHP en el foro de PHP en Foros del Web. Hola, tengo un problema con las sesiones y la verdad no encuentro qué puede estar pasando... El Usuario ingresa correctamente (valida sus claves ) , ...
  #1 (permalink)  
Antiguo 30/11/2007, 13:07
 
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
  #2 (permalink)  
Antiguo 30/11/2007, 13:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Se pierde la información de la sesión PHP

Cual es el tiempo de vida de tu sesion? (en el php.ini)

Saludos.
  #3 (permalink)  
Antiguo 30/11/2007, 13:26
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Se pierde la información de la sesión PHP

Es éste:

session.gc_maxlifetime = 4320
  #4 (permalink)  
Antiguo 22/02/2008, 18:11
(Desactivado)
 
Fecha de Ingreso: enero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Se pierde la información de la sesión PHP

Saludos,

Yo también tenía ese mismo problema probe de todas las soluciones posibles y encontre una que no me parecia logico pero a la cuenta me resulto y es en el SAVE_PATH le cambie la ruta hacia una ruta de la carpeta CGI-BIN y dentro de ella en una carpeta TMP y ahora ya cuento con persistencia de datos, los datos en ningun momento se borran o cambian su valor.
  #5 (permalink)  
Antiguo 22/02/2008, 20:51
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 6 meses
Puntos: 101
Re: Se pierde la información de la sesión PHP

Hola,
Vos en lo codigos de if(isset()) pones haci:

Código PHP:
if (!(isset($_SESSION['_userid']))) 
y deveria ser haci:
Código PHP:
if(!isset($_SESSION['_userid'])) 
Suerte
Salu2
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 26/02/2008, 16:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 12
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Se pierde la información de la sesión PHP

amigos por ahi alguien pregunto, cual es el tiempo de vida de la cookie
no se referia a esto?
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0
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 22:13.