Foros del Web » Programando para Internet » PHP »

Problema con variables de sesion

Estas en el tema de Problema con variables de sesion en el foro de PHP en Foros del Web. Hola foristas ... Tengo instalado el phptriad v2.x (apache+mysql+php+phpmyadmin) El apache tiene configurado como modulo a php. La configuracion de php tiene las sgtes caract. ...
  #1 (permalink)  
Antiguo 17/02/2005, 10:52
Avatar de juanpablomagno  
Fecha de Ingreso: enero-2004
Mensajes: 35
Antigüedad: 13 años, 10 meses
Puntos: 0
Problema con variables de sesion

Hola foristas ...
Tengo instalado el phptriad v2.x (apache+mysql+php+phpmyadmin)
El apache tiene configurado como modulo a php.

La configuracion de php tiene las sgtes caract.
-Variables globales en on
register_globals = On
-Carpeta se sesion
session.save_path = c:/apache/tmp

Yo utilizo las variables de sesion asi:
<?
session_start();//inicio de sesion o continuacion de otra ya iniciada
$_SESSION['foo']="nada";//creo o chanco la variable de sesion
?>

Tengo entendido que las variables de sesion se conservan durante toda la duracion de la session ( es decir mientras no se destruya la session o se cierre el navegador).

El problema radica en la persistencia de esta variables ....estoy haciendo una aplicacion en la que tengo que pasar por muchas paginas de scripts... y al parecer en algun momento las variables se corrompen....es decir no conservan su mismo valor ?¿?¿?¿ estos son reemplazados por otros valores que ya he utilizado antes....

Ya depure el codigo php, revize mis datos y conexion en mysql, estoy seguro que no es un error de programacion...

Si alguien me podria decir si hay algun tipo de problema con mi manera de utilizar las sessiones por favor... denme una manita ... que la necesito bastante
  #2 (permalink)  
Antiguo 17/02/2005, 11:25
 
Fecha de Ingreso: febrero-2005
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
No se muy bien lo que quieres decir con qué se corrompen. ¿Que cambian de valor por anteriores?

Una tonteria que supongo que habrás tenido en cuenta:

session_start(); debe ir al principio antes que ninguna cabeza html en todas las páginas para cargar las variables.

Yo lo que hago con las sesiones es crear sesiones globales y registrarlas y luego cargarlas en cada una de las paginas y comprobar si están registradas para hacer el acceso o no. (y bueno, la encriptación también).

Prueba a hacer algunos echo para hacer un seguimiento de las variables y ver en el momento exacto que cambian, quizá así obtengas alguna idea de donde exactamente puede estar el fallo...

Espero haberte ayudado (yo tb tengo problemas de otro tipo! a ver si alguien me puede ayudar! jeje)
  #3 (permalink)  
Antiguo 17/02/2005, 11:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías poner el código completo que usas .. almenos de una de tus scripts donde creas (defines/das valor) a una varaible de sesión y como pasas al siguiente script donde lees ese valor de esa variable de sesión.

Te recuerdo que el SID (identificador único de sesione) se propagan por dos métodos: cookies y URL .. si lo pierdes . no obtendrás el valor de tus variables de sesión.

Para esto en cada script que accedas o des valor a una variable de sesión tiene que contener al principio .. session_Start() .. si no lo usas en ese script no accederas ni permanecerá un valor que puedas asignar tipo $_SESSION['variable']="valor";

Por lo demás .. una sesión no queda disponible su nuevo valor (si lo modificas) hasta la próxima petición al servidor .. es decir . .entre un script.php al otro.php .. o recarga del mismo.

Otro detalle es que puedas estar viendo "la caché" de tu navegador. Esto último por defecto PHP lo ajusta por session_cache_limiter (en php.ini y función afin) a un valor "private" (es decir .. que no se haga caché de esas páginas que usan sesiones).

Un saludo,
  #4 (permalink)  
Antiguo 17/02/2005, 17:58
Avatar de juanpablomagno  
Fecha de Ingreso: enero-2004
Mensajes: 35
Antigüedad: 13 años, 10 meses
Puntos: 0
Hola Cluster talvez no fui muy expliciito con mi problema ...
El SID en mis sesiones es propagado mediante cookies , ya que nunca los mando por URL, ¿necesito configurar algo extra para hacerlo por este medio? yo tenia entendido que ya estaba configurado por defecto...

Todos los script que utilizo tienen este fragmento al inicio
<?
session_start();
if($_SESSION['aut']!='1'){
echo "<html><body><SCRIPT LANGUAGE='JavaScript'>location.href='index.php?msg =Debe%20ingresar%20su%20loggin%20y%20password%20pr imero'</SCRIPT></body></html>";
}
?>
Asi lo redireciono al inicio si el usuario no esta autorizado... ( se trata de una aplicacion que valida usuarios) o si ingresa a un script "interno" antes de haberse loggeado primero.

En cuanto a la cache del navegador, creo que queda descartada ya que siempre actualizo la pagina varias veces... por si las moscas.

Espero haber sido mas entendible.

PD: me podrias detallar mas :"Por lo demás .. una sesión no queda disponible su nuevo valor (si lo modificas) hasta la próxima petición al servidor .. es decir . .entre un script.php al otro.php .. o recarga del mismo."
  #5 (permalink)  
Antiguo 18/02/2005, 05:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
El SID en mis sesiones es propagado mediante cookies , ya que nunca los mando por URL, ¿necesito configurar algo extra para hacerlo por este medio? yo tenia entendido que ya estaba configurado por defecto...
Bueno .. NUNCA has de confiar en algo que "crees" .. debes corroborrarlo .. De hecho si bien una instalación de PHP "por defecto" deja (actualmente) la propagación del SID en cookies .. en otras situaciones puede que no te encuentres en la misma situación de configuración.

Revisa tu php.ini o haz un phpinfo() y verifica el estado de:
session.use_cookies (debe ser ON) minimo ..

Revisa bien que se esté propagando el SID en cookies, pues .. ahí por ejemplo en tu código usas una redirección por javascript. PHP si usas "session.use_trans_sid" (a ON) reescribe ciertos Tag's HTML para insertar el SID (si es que lo usas a ON) . .pero no lo hace en ese tipo de redireccionamientos (ni en header("Location ...") ni otros javascript), todo esto por si usases (ya estamos especulando sin ver la configuración exacta que usas) ... "session.use_trans_sid" a ON y tal vez session.use_cookies a ON pero tuvieras problemas en la propagación del SID en la cookie por ejemplo por que tu navegador no las acepte (por nivel de seguridad de tu navegador) .. o bien algún proxy o similar que altere o no permita esas cookies.

Si dices:
Cita:
y al parecer en algun momento las variables se corrompen....es decir no conservan su mismo valor ?¿?¿?¿ estos son reemplazados por otros valores que ya he utilizado antes....
Tendrás que centrar el problema .. dices que usas "muchos scripts" .. aquí no vemos toda tu aplicación (ni es el foro sitio adecuado para eso) .. tal vez en algún script no usastes session_start() antes de pretender acceder a $_SESSION


Cita:
PD: me podrias detallar mas :"Por lo demás .. una sesión no queda disponible su nuevo valor (si lo modificas) hasta la próxima petición al servidor .. es decir . .entre un script.php al otro.php .. o recarga del mismo."
Ejemplo
Código PHP:
<?
// inicio uso sesiones.
session_start();
// crear una variable en la sesión activa:
$_SESSION['variable']="valor";

// Pretender leer su valor de la sesión.
echo $_SESSION['variable']
En este caso .. según el flujo del script .. se está definiendo un valor a esa variable de sesión .. el valor "real" que tiene $_SESSION['variable'] (para el usos de dicha sesión) en ese punto teóricamente no es el que ahí ves (que ese el que has dado el valor ahí mismo) sino el que tenía .. Sólo cuando "recargues" ese script .. o bien pases de ese script.php a otro_script.php por un link, redirección .. etc será cuando realmente queda "registrada" tu variable de sesión .. Ese "paso" de un script a otro es una "petición" al servidor HTTP donde le "pides" otra página (o script.php).

Un saludo,

Última edición por Cluster; 18/02/2005 a las 05:50
  #6 (permalink)  
Antiguo 18/02/2005, 05:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Otro detalle al margen ..

Código PHP:
<?
session_start
();
if(
$_SESSION['aut']!='1'){
echo 
"<html><body><SCRIPT LANGUAGE='JavaScript'>location.href='index.php?msg=Debe%20ingresar%20su% 20loggin%20y%20password%20primero'</SCRIPT></body></html>";
}
?>
ten cuidado con eso .. el redireccionamiento lo haces vía javascript .. eso es altamente peligroso

Usa:

Código PHP:
<?
session_start
();
if(
$_SESSION['aut']!='1'){
   
header ("Location: donde_Se_tenga_que_ir.php?variable=valor");
   exit;
}
?>
El redireccionamiento por cabeceras HTTP es más efectivo que vía javascript .. Las cabeceras HTTP se interpretan -antes- que tu javascript pueda haber llegado al navegador para que se interprete (imagina un navegador que no interprete javascript .. puede suceder, según el flujo de tu código (no se vé en su contexto) .. podría mostrarse tu página igualmente simplemente por qué no funcionó tu redirección ni terminas la ejecución del script en ese punto.).

Un saludo,
  #7 (permalink)  
Antiguo 18/02/2005, 18:43
Avatar de juanpablomagno  
Fecha de Ingreso: enero-2004
Mensajes: 35
Antigüedad: 13 años, 10 meses
Puntos: 0
Apelo a que estas alturas no te hallas cansado de responder Cluster ...
Segun lo que te he entendido, el sgte script...
<?
// inicio uso sesiones.
session_start();
// crear una variable en la sesión activa:
$_SESSION['variable']="valor";

// Pretender leer su valor de la sesión....significa que no pintaria el valor "real" ¿?¿
echo $_SESSION['variable'] ;//sin embargo esto pinta "valor"

//y si despues hago esto
$_SESSION['variable']="nuevo_valor";
echo $_SESSION['variable'] ;//pintaria "nuevo valor"
//sin necesidad de invocar nuevamente la session desde otro script
?>

En cuanto a mi problema con las variables de session, he verificado el php.ini y todo esta correctamente configurado para que acepte las cookies y para q el sid sea propagado mediante coockies
Ahora estoy revizando mis scripts por 3 vez para ver si hay algo que se me haya escapado ...gracias por todos los tips que lanzaste...
  #8 (permalink)  
Antiguo 18/02/2005, 19:29
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
PD: me podrias detallar mas :"Por lo demás .. una sesión no queda disponible su nuevo valor (si lo modificas) hasta la próxima petición al servidor .. es decir . .entre un script.php al otro.php .. o recarga del mismo."
En realidad para efectos de tu caso y de la mayoría de los casos, este tema no es de mucha relevancia para las sesiones (como sí lo es para las cookies).
Te pongo un ejemplo de cómo funcionan las cookies:
Código PHP:
setcookie("variable""valor"time()+3600);// seteará una cookie (aparentemente)

// Entonces, deberíamos poder hacer:
echo $_COOKIE['variable']; // No funciona 
¿Por qué no funciona? Porque esa cookie en realidad aún no ha sido creada. Recién existira en la próxima petición.

¿Y qué pasará con lo siguiente?
Código PHP:
$_COOKIE['variable'] = "nuevo valor";// asignamos valor a $_COOKIE['variable']
echo $_COOKIE['variable'];// imprime "nuevo valor"... funciona!!... o no? 
Como verás, en este caso jamás hemos creado la cookie (no ves el "setcookie()" por ningún lado) sinembargo podemos utilizar $_COOKIE['variable'] que funcionará como una variable local. Cuando uno pone "echo $_COOKIE['variable']" evidentemente no se está leyendo el valor de la cookie sino de una variable local llamada así. Y nunca escribimos nada en la cookie.

Con las sesiones pasa algo similar.
Si no hicieras session_start() al comienzo, igual podrías asignar:
Código PHP:
$_SESSION['variable']="valor";
echo 
$_SESSION['variable'] ;// esto pinta "valor"

$_SESSION['variable']="nuevo_valor";
echo 
$_SESSION['variable'] ;// pintaria "nuevo valor" 
Y aquí evidentemente tampoco estás leyendo valores desde la sesión porque nunca hiciste "session_start()".

Con esto quiero decirte que puedes cambiar las veces que quieras el valor de una variable de sesión (abierta con session_start()) dentro de la ejecución de un script... pero eso no quiere decir que estés escribiendo en la sesión. La escritura en la sesión se hace cuando termina la ejecución de todo el script y lo puedes comprobar recién en la siguiente petición.

Pero, como te dije... en el tema de sesiones no tiene una gran relevancia, porque no te enteras si estás utilizando la local o la de la sesión. Ya que igual al final los valores locales van a parar a la sesión.

Saludos
  #9 (permalink)  
Antiguo 19/02/2005, 13:23
Avatar de juanpablomagno  
Fecha de Ingreso: enero-2004
Mensajes: 35
Antigüedad: 13 años, 10 meses
Puntos: 0
Gracias por tu aclaracion...
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:15.