Foros del Web » Programando para Internet » PHP »

se cierra sesión al actualizar

Estas en el tema de se cierra sesión al actualizar en el foro de PHP en Foros del Web. Muy buenas. Tengo una página que requiere autentificación. Se comprueba si el usuario ha iniciado sesión mediante un include del archivo seg.php, cuyo código es ...
  #1 (permalink)  
Antiguo 12/08/2006, 12:47
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
se cierra sesión al actualizar

Muy buenas.

Tengo una página que requiere autentificación. Se comprueba si el usuario ha iniciado sesión mediante un include del archivo seg.php, cuyo código es el siguiente:

Código PHP:
<?
session_start
(); 

if (
$_SESSION["autentificado"] != "SI") { 

    
header("Location: index.php"); 

    exit(); 

 
?>
Todo bien. El problema es que si se actualiza la página, la sesión se cierra y nos redirige al index, donde se nos vuelven a pedir los datos. Esto nunca me había ocurrido, pero esta vez utilizo un alojamiento gratuito del tipo: mipagina.laempresaquenosdaeldominio.com

¿Creeis que tiene algo que ver? ¿es esto un cname? Por su parte no he obtenido respuesta todavía.

Gracias maquinillas.
  #2 (permalink)  
Antiguo 12/08/2006, 12:59
Avatar de jdelozar  
Fecha de Ingreso: agosto-2006
Ubicación: Madrid
Mensajes: 32
Antigüedad: 11 años, 4 meses
Puntos: 0
Yo no soy experto en PHP, pero probaría a poner el session_start() después de la comprobación de estar autenticado.

Según el manual de PHP:
session_start() crea una sesión (o la continúa basandose en el session id pasado por GET o mediante una cookie).

Probablemente esté llegadote el session id en el nuevo servidor por algún motivo y estás iniciando sesión nueva.

Un saludo:
Juan R.
__________________
Un saludo:
Juan
  #3 (permalink)  
Antiguo 12/08/2006, 13:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Deberias de checar varias cosas, antes de pensar si el problema es de tu codigo (si ya lo haz checado y en tu maquina funciona bien), el problema puede ser que en el host gratuito que tengas, hayan activado el register_globals y en alguna parte de tu codigo estas reescribiendo la variable que te saca de tu sesion.
  #4 (permalink)  
Antiguo 12/08/2006, 13:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
No puedo comprobarlo porque tarda mucho en actualizarse la página en el servidor, pero es probable que me salga el error "headers allready sent" pues session_start me parece que debe ir al comienzo del código.

Gracias!
  #5 (permalink)  
Antiguo 12/08/2006, 13:14
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
GatorV:

Funciona bien en otros servidores no gratuitos, sí.

No sé si puedo comprobar por mi cuenta la configuración del php del servidor ¿..?

En caso de que esté reescribiendo la variable yo misma ¿cómo lo corrijo? Actualmente sólo existen dos páginas, la del login y a la que accedes una vez iniciada la sesión. ¿Te pongo el código de los scripts completo?
  #6 (permalink)  
Antiguo 12/08/2006, 13:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Ayudaria mucho si posteas tu codigo para detectar donde puedas sobreescribir la variable.

Para checar la configuracion del server es facil solo creas un archivo que se llame phpinfo.php y le pones este code:
Código PHP:
phpinfo(); 
  #7 (permalink)  
Antiguo 12/08/2006, 13:31
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
bien

Script del formulario para el login, en index.php:

Código PHP:
echo "<form action='aut.php' method='POST'>";
echo 
"<table class='login'><tr>";
 if (
$_GET["errorusuario"]=="si")
{
echo 
"<th colspan='2'>Int&eacute;ntalo de nuevo</td></tr>";
}
else

echo 
"</tr>";

//sigue el formulario de forma normal.

Código de aut.php:

Código PHP:
<? 
if ($_POST["usuario"]=="usuario" && $_POST["psw"]=="password"){ 

    
session_start(); 
    
$_SESSION["autentificado"]= "SI"
    
header ("Location: bienvenido.php"); 
}else { 

    
header("Location: index.php?errorusuario=si"); 

?>
La mayor parte de bienvenido.php es hatml/css, sólo que al inicio del código fuente tenemos el include

Código PHP:
include ('ss.php'); 
cuyo código he puesto arriba.
  #8 (permalink)  
Antiguo 13/08/2006, 01:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Pues de primera instancia no veo nada malo con tu codigo, yo te recomendaria que vieras diferencias en cuanto a PHP para ver si tu problema radica ahi.
  #9 (permalink)  
Antiguo 13/08/2006, 10:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa como propagas el SID en tu configuración de PHP.

session.use_trans_sid
session.use_cookie

Lo màs probable es que propagues el SID en el URL (session.use_trans_sid a ON) y que no propagues el SID en cookies (session.use_cookies = OFF y/o que no se esté creando la cookie que PHP genera para tal fin por qué tu navegador no la acepta u otro soft la está bloqueando).

En ese caso .. PHP ante una redirección tipo "Location" (por cabeceras: header()) NO incrustra el SID automáticamente (por mucho que se use session.use_trans_sid a ON) ..

Una prueba sencilla para asegurarse todo esto sería forzando el SID a mano en el LINK de redirección:

En todos los "Location" .. incluir el SID:

header ("Location: bienvenido.php?".SID);

header("Location: index.php?".SID);

header("Location: index.php?errorusuario=si&".SID);

Si así funcionan tu sesiones, implica que:
1) tienes un problema con la propagación del SID en cookies (no se está creando dicha cookie).
2) estas propagando el SID en el URL.

Según recomienta PHP.net .. es màs seguro propagar el SID en cookies .. además de más "transparente" para tu código/aplicación pues no tienes que -añadirlo- (el SID) a "mano" en determinads casos como el planteado (header("Location ....))

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 18:17.