Foros del Web » Programando para Internet » PHP »

Ayuda la sesion se borra

Estas en el tema de Ayuda la sesion se borra en el foro de PHP en Foros del Web. Hola: Estoy trabajando con sesiones y el problema que tengo es el siguiente. tengo un usuario trabajando con una sesion activa y marcado como activo ...
  #1 (permalink)  
Antiguo 12/02/2004, 11:01
 
Fecha de Ingreso: febrero-2004
Ubicación: Viña del Mar - Chile
Mensajes: 7
Antigüedad: 20 años, 1 mes
Puntos: 0
Ayuda la sesion se borra

Hola:
Estoy trabajando con sesiones y el problema que tengo es el siguiente.
tengo un usuario trabajando con una sesion activa y marcado como activo en el a bd. Si este usuario abre otro navegador y tratata de iniciar actividades, el sistema no le deja por figurar activo en la bd y tener una sesion ya creada. El problema viene que cuando quiere seguir trabajando en el navegador inicial, no le es permitido, ya que la variable de sesion fue eliminada!!!!!!... y no se ha actualizado su estado en la bd , por lo tanto no puede reiniciar y logearse de nuevo para iniciar una sesion.

la pregunta es:
QUE PASA???? por que se destruye la sesion original automaticamente?????.. no hay nada en el codigo que indique que debe cerrarse la sesion ....


PORFA.. HELP ME

Salu2.
  #2 (permalink)  
Antiguo 12/02/2004, 12:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Si nos describes que configuración sobre el tema sesiones usas .. y nos pones algo de código que usas como para ver como propagas el SID (muyyyy importante en temas de sesioens) .. igual podrémos ver alguna solución.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/02/2004, 23:07
 
Fecha de Ingreso: febrero-2004
Ubicación: Viña del Mar - Chile
Mensajes: 7
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola, les explico como funciona:

Verifico que el usuario con un determinado login y pasword (que entrega a traves de un formulario)exista, si es asi verifico si ya esta logeado en la bd (usuario activo)si lo esta no lo dejo activar otra sesion y lo redirecciono a la pagina principal, si no esta logeado recien aqui creo la sesion y actualizo el campo en la bd a usuario activo.

(idealmente deberia resultar como lo explico, pero no es asi )

Salu2
  #4 (permalink)  
Antiguo 12/02/2004, 23:16
 
Fecha de Ingreso: febrero-2004
Ubicación: Viña del Mar - Chile
Mensajes: 7
Antigüedad: 20 años, 1 mes
Puntos: 0
el codigo que uso para crear la sesion es este:
Código PHP:
//actualizo el campo estado a usuario activo
$actualizado mysql_query("UPDATE user SET estado='1' WHERE nombre='$login' and pass='$password'") or die ("Imposible actualizar datos de la consulta");
session_start();//inicio la sesion
session_register('usuario');//registro la variable como de sesion
session_register('nombre');
session_register('id');
session_register('codigo');
$usuario 'AUTORIZADO';//autorizo al usuario a entrar
$id session_id();
$nombre $row[nombre];//esto lo leo de una bd
$codigo $row[codigo];
mysql_free_result($valida);
mysql_close();
header("Location:[url]http://localhost/portalhotelero/administrador/index.php[/url]");//redirecciono a la pagina principal  
exit; 
espero sea entendible, este es parte del codigo no puse todo porque me parece que es muy largo.

Porfa denme aunque sea una pista de cual puede ser mi error.

Chaop
  #5 (permalink)  
Antiguo 13/02/2004, 06:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Bueno .. con ese código sólo se puede hacer bien poco, no se vé donde haces todo ese tema de validar al Usuario que ya está en tu sistema .. ni alguna otra página/script para ver como propagas el SID (supongo que dejas a PHP que propague el SID por tí .. ya que en ese link no se vé que propagues tu el SID a mano ..)

Una consulta ..

¿ Para que registras en una variable de sesión el ID de sesión (session_id()) cuando ese dato lo puedes leer en cada sesión iniciada y será ese miso que viaja en tu variable de sesión "ID" .?

Deberías usar $_SESSION y registrar las variables de sesión por ese array superglobal y no asumirlas como globales (tus variables de sesión) (sólo para PHP 4.1.0 en adelante).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 13/02/2004, 20:58
 
Fecha de Ingreso: febrero-2004
Ubicación: Viña del Mar - Chile
Mensajes: 7
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola:
Exacto, como tu dices Cluster dejo a PHP propagar el SID,
tienes razon es mejor usar el $_SESSION resulta mas claro.
El registrar el SID era solo una forma de control para mi
se me olvido sacarlo.(sorry)
Este es el codigo completo que uso para validar a un usuario
y como creo una sesion.
Código PHP:
<?php //verifico que los campos esten llenos
if(!strcmp($login,"") or !strcmp($password,""))
{
//si hay un campo vacio lo redirecciono a la pagina de entrada y seteo 
//el valor de error al ingresar
    
header("Location:http://localhost/portalhotelero/administrador/entrada.php?est=1");  
    exit;
}
  else 
//me conecto a la BD
  
{
   require_once(
'../includes/funciones.inc.php');
   
$conectate conectarse();
   
$valida mysql_query("Select * from user where nombre='$login' and pass='$password' and permiso= 'A' "
or die (
"Imposible ejecutar la consulta");
   
$num mysql_num_rows ($valida);
   
$rowmysql_fetch_array($valida);
   if (!
$num)//verifico si hay un usuario registrado
   
{
   
mysql_free_result($valida);
   
mysql_close();
   
//si no lo hay redirecciono a la pagina de entrada e indico que hubo un error al ingresar
   
header("Location:http://localhost/portalhotelero/administrador/entrada.php?est=1");  
   exit;
   }
   else{
//si las claves son correctas
    //verifico si el usuario ya esta conectado
    
if ($row[estado]=='1'){ //si ya esta conectado lo redirecciono dandole un mensaje
    
header("Location: http://localhost/portalhotelero/administrador/userconectado.phpl]");  
    }
    else{
//si el usuario no esta conectado     
         //actualizo el campo estado a usuario activo
         
$actualizado mysql_query("UPDATE user SET estado='1' WHERE nombre='$login' and pass='$password'"
                    or die (
"Imposible actualizar datos de la consulta");
         
session_start();//inicio la sesion
         
$_SESSION[usuario] = 'AUTORIZADO';//autorizo al usuario a entrar
         
$_SESSION[nombre] = $row[nombre];
         
$_SESSION[codigo] = $row[codigo];
         
mysql_free_result($valida);
         
mysql_close();
         
header("Location:http://localhost/portalhotelero/administrador/index.php");
         
//redirecciono a la pagina principal  
         
exit;
        }
    }
}    
?>
y en cada pagina incluyo este codigo para seguir la sesion:
Código PHP:
<?php session_start();
if (
$usuario!="AUTORIZADO"){
header("Location:http://localhost/portalhotelero/administrador/entrada.php?est=1"); 
exit(); } 
?>
espero que esto sea suficiente para que puedas entender lo que trato de hacer.
Saludos
  #7 (permalink)  
Antiguo 14/02/2004, 10:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
BUeno .. lo que veo es:

if ($usuario!="AUTORIZADO"){

Si registras la variable de sesión con $_SESSION .. así debes leerla cuando la requieras:

if ($_SESSION['usuario'] !="AUTORIZADO"){

observación: .. ten cuidado conlos espacios entre "Location: y la pagina que redireccionas .. en muchos casos del código que pusistes no usas el espacio adenas .. usa SIEMPRE un exit; despues de un header("Location: ...") ya que síno .. el flujo del códio PHP continua ejecutandose y dependiendo de tus condicionales puede generar efectos no deseados o esperados).

Despues habría que ver si usas (php.ini o phpinfo()):
session.use_cookies = 1 (u ON) por qué .. sino el SID no se va a propagar automáticamente en los redireccionamientos que haces con header("Location: ...") pese que puedas usar session.use_trans_sid = 1 (ON)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 14/02/2004, 20:06
 
Fecha de Ingreso: febrero-2004
Ubicación: Viña del Mar - Chile
Mensajes: 7
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola,gracias por los consejos Cluster ya hice los cambios.
Tratando de buscar el porque del error que tengo descubri que cuando abro una nueva ventana para logear a un usuario (que ya tiene una sesion activa), es en ese momento en donde se borra la cookie que contiene la sesion y no se porque pasa eso
¿Tu sabes porque pasa eso?, ¿sabes que puedo estar haciendo mal?

Saludos
  #9 (permalink)  
Antiguo 15/02/2004, 09:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Con:
session.use_cookies = 1

No te devería pasar .. es más el hecho de usar cookies para propagar el SID te permite abrir ventanas y redireccionar como gustes ya que el SID PHP lo toma de la cookie que crea.

Si propagases el SID por el URL ahí .. sí, al abrir tu ventana (window.open ....) tendrías que propagar el SID en la llamada a tu nueva ventan (window.open....(ventana.php?SID ...) ...

Si hicistes cambios en tu php.ini . asegurate de que quedarón. Haz denuevo un phpinfo() y asegurate de que esas directivas tengan el valor esperado en tu php.ini. Y ... asegurate de que tu navegador acepta cookies para que pHP la pueda usar.

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 00:03.