Foros del Web » Programando para Internet » PHP »

porqué se pierden los datos de sesión?

Estas en el tema de porqué se pierden los datos de sesión? 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 02/12/2007, 09:06
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta porqué se pierden los datos de sesión?

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?<?=SI D ?>'");

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
  #2 (permalink)  
Antiguo 02/12/2007, 12:26
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: porqué se pierden los datos de sesión?

Hola miguelangelb, cómo vas??

Dices lo siguiente:
Cita:
session.use_trans_sid = 0 (estoy enviando manualmente en cada link el .SID)
Osea que mandas el sid de session por URL??? Si es así tu configuración del php.ini está mal, debería estar en 1. Dime otra otra cosa, esta instrucción en tu php,ini cómo la tienes??:

Código:
session.use_cookies
Si está en 1, eso puede estar presentandote el problema!!!

Dime si es así para estar seguros, por qué realmente lo que estarías haciendo es propagar el SID por cookies y no configurado para hacerlo por URL, puede estar presentándose un conflicto, quizás dos SID...

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 03/12/2007, 11:51
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: porqué se pierden los datos de sesión?

Hola Carxl,
El php.ini está así:

session.use_cookies = 1

Creo que problema está ahí.....

Como debería estar configurado el PHP.ini?

Miguel Angel
  #4 (permalink)  
Antiguo 03/12/2007, 12:28
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: porqué se pierden los datos de sesión?

Carxl

Revisando lo que me comentas, encontré que tenía en algunos archivos de entrada al sitio web lo siguiente:

$expireTime = 60*60*24;
session_set_cookie_params ( $expireTime, '/tmp/hom/', 'sitioweb.com');

La verdad quiero eliminar todo el tema de las cookies de mi servidor, y habilitar únicamente el manejo de sesiones propagando el SID manualmente.
( es mejor que automáticamente?)

Qué sucede si en cada vínculo del sitio estoy enviando el SID y tengo habilitada la opción de session.use_trans_sid = 1 ? se crea conflicto?

o en éste caso es mejor dejarlo como está en session.use_trans_sid = 0?

en éste caso como debe quedar el php.ini ?

saludos

Miguel Angel
  #5 (permalink)  
Antiguo 03/12/2007, 12:35
 
Fecha de Ingreso: septiembre-2007
Mensajes: 220
Antigüedad: 16 años, 7 meses
Puntos: 1
Re: porqué se pierden los datos de sesión?

Lo mejor suele ser cookies, si no las quieres de ninguna manera yo creo que automáticas van bien, sino te tocará escribirla en cada enlace.

Para cambiar los parámetros:

Código PHP:
ini_set('session.use_cookies'false);
ini_set('session.use_trans_sid'true); 
  #6 (permalink)  
Antiguo 03/12/2007, 13:03
 
Fecha de Ingreso: enero-2006
Mensajes: 33
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: porqué se pierden los datos de sesión?

Sanubrio:
No sé si estoy equivocado, pero las cookies las puede bloquear un cliente desde su PC, así que la mejor manera de garantizar la visualización correcta de tú página es a través de las sesiones cierto? (por esto prefiero eliminar su uso!!)

Segundo, el envío manual de la sesión en cada enlace (aunque es más engorroso) , me garantiza más seguridad (en la validación del usuario que ingresa) y en su navegación cierto?

El código que me mandas.....

ini_set('session.use_cookies', false);
ini_set('session.use_trans_sid', true);

....es para colocarlo en la página php de entrada al sitio de acuerdo? Esto garantiza que en particular, toda ésta sesión del Usuario se haga bajo estos parámetros, pero se restablecen los que están por defecto en el php.ini cuando sale de ella?

Por último, para que sea permanente la deshabilitación del uso de cookies, debería cambiar el php.ini así?

session.use_cookies = 0;

Para propagar el SID (invisible) el php.ini debe estar así:
short_open_tag = On cierto?

Si deseo que la propagación del SID se haga manualmente el php.ini debería estar así?
session.use_trans_sid = 0

Si deseo que la propagación del SID se haga automáticamente el php.ini debería estar así?
session.use_trans_sid = 1 cierto?

Ahora bien, si el session.use_trans_sid está en 1(activado) o sea que la propagación de la sesión es automática, que sucede si paralelamente lo estás enviado en cada link, se crea agún tipo de conflicto por ir doble, o prima alguno de los dos?

Saludos

Miguel Angel
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:45.