Foros del Web » Programando para Internet » PHP »

Perdida de variable de sesion

Estas en el tema de Perdida de variable de sesion en el foro de PHP en Foros del Web. Hola a todos , me ha sucedido una cosa que considero bastante curiosa. Pierdo el valor de la variable de sesion. No es la primera ...
  #1 (permalink)  
Antiguo 12/12/2005, 12:47
 
Fecha de Ingreso: agosto-2005
Mensajes: 142
Antigüedad: 12 años, 3 meses
Puntos: 0
Perdida de variable de sesion

Hola a todos , me ha sucedido una cosa que considero bastante curiosa.
Pierdo el valor de la variable de sesion. No es la primera vez que las utilizo pero en este caso particular no hay manera de propagar la variable de sesion, simplemente deja de existir. La creo, la printo y al cambiar de página ha desaparecido

Os pongo un trozo del codigo a ver si alguien sabe que ocurre

cabecera.php
<?session_start();?>
<html>
<head>
...




/*En admin es donde tenemos el formulario y recargamos para ver si el usuario se recarga correctamente, en caso afirmativo se redirecciona a backoff.php despues de iniciar la variable de sesion */

admin.php

<?include("cabecera.php");?>
<?include("funciones.php");?>
<?
if($valida=='valida'){

$query="select IDUsuario from usuario where Usuario='$usuario' and Contrasena='$clave'";
$query=conecta("$query");
$NumReg=mysql_num_rows($query);
if($NumReg==1){
$_SESSION["autentificado"]='S';
$p=$_SESSION["autentificado"];
//print "PAram:$p";
?>
<script>
location.href='backoff.php?<?print("p=$p")?>';
</script>
}
/*
En backoff miramos si la sesion existe y si es igual a S, en caso contrario te direcciona a una pagina de error. Pero despues de inicilizarla en admin, aqui me dice que no existe, en cambio si la paso por la url y la asigno a la variable desesion , entonces , a partir de ese momento y para todas las paginas si que existe la variable de sesion.
*/
backoff.php

<?include("cabeceraback.php");?>
<table width="100%" height="100%" >
<tr >
...

cabeceraback.php
<?session_start();?>
<html>
...

if(!isset($_SESSION["autentificado"]) || $_SESSION["autentificado"]!='S'){
?>
<script>
location.href="../admin.php?err=1";
</script>
...


Espero no haber sido demasiado pesado. Pero ya no se que mirar.

Hasta pronto y sed buenos que ya sabeis lo que esta a la vuelta de la esquina.
  #2 (permalink)  
Antiguo 12/12/2005, 13:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Parece que el problema que tienes es con la propagación del SID. No sé si conoces que el SID se puede propagar de dos formas principalmente:

1) Por el URL
2) Por cookies.

A su vez .. PHP puede propagar el SID automáticamente por tí (ya que tu en tu código no lo haces expresamente) de dos formas:

1) Por el URL, si usas session.use_Trans_sid = ON . .En este caso PHP sobre-escribe ciertos tag's HTML como links comunes, formularios .. etc para incrustrar el SID en ellos. Pero, no lo hace en redireccionamientos como javascript (tus location.href ...) ni en header("Location ...") ni en links de flash ..

2) Por cookies. Siempre y cuando tu navegador acepte cookies, y no tengas ningún dispositivo tipo antivirus, proxy .. etc que bloquee cookies. En este caso .. php.ini debes usar session.use_cookies = ON

Por ende .. puede que en este caso, tu navegador (u otro elemento de los descritos) no esté aceptando las cookies que PHP puede enviar (falta que revises tu configuración) y aunque propagas el SID forzando a PHP que lo haga por el URL .. como ya te he comentado, PHP no lo va hacer expresamente en esos redireccionamientos javascirpt que tienes.

Solución:
1) Acepta cookies y propaga el SID en cookies: Es lo más seguro y recomendado por PHP.net
2) Propaga el SID en el URL manualmente (por lo menos en los redireccionamientos que hagas javascript .. y en general en todo para no depender de nada de configuración de PHP). más info: www.php.net/session .. ahí puedes ver el uso de la constante SID que te devuelve eso mismo.

Otras observaciones:

Cita:
if(!isset($_SESSION["autentificado"]) || $_SESSION["autentificado"]!='S'){
?>
Eso es redundate .. si $_SESSION existe .. ya puedes asegurar que tu "autentificado" existe .. de hecho el valor es lo de menos. Podrías usar esa variable con algo más útil para tu aplicación .. tal vez el "ID" del usuario activo o su nombre/nick para mostrarlo o usarlo en tus aplicaciones.

Cita:
script>
location.href="../admin.php?err=1";
</script>
...
Deberías redireccionar usando:
Código PHP:
header("Location: pagina.tal");
exit; 
Claro, eso te dará problemas con tu forma de trabajar haciendo el "include()" de un script que genera salida (HTML/etc) ... Deberías reordenar en tu caso el código pensando que programas en PHP y que con este generas el "HTML" que el cliente verá.

Un saludo,
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 15:41.