Foros del Web » Programando para Internet » PHP »

problema al cerrar sesion por tiempo de inactividad....

Estas en el tema de problema al cerrar sesion por tiempo de inactividad.... en el foro de PHP en Foros del Web. Hola...estoy teniendo problemas a la hora de guardar en variables el tiempo del ultimo acceso a la web para saber si ha pasado el tiempo ...
  #1 (permalink)  
Antiguo 25/02/2008, 11:17
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
problema al cerrar sesion por tiempo de inactividad....

Hola...estoy teniendo problemas a la hora de guardar en variables el tiempo del ultimo acceso a la web para saber si ha pasado el tiempo de inactividad necesario y cerrar la sesion, supongo que será que tengo que cambiar de pagina una vez que haya hecho login, ya que si no, al actualizar la pagina, vuelven a guardarse los mismos tiempos...os paso el codigo, para que veiais a lo que me refiero...


Al darle al boton de enviar, voy al archivo login.php
este contiene esta funcion:

Código PHP:
function valida_usuario()        //Funcion que valida el log y la contraseñas introducidas
{

$login $_POST['login'];        //paso valor del formulario a la variable login
$password $_POST['password']; //paso valor del  formulario a la variable password

$_SESSION['login'] = $login;

$conexion conectar("localhost","root","","golftdb");

$sqlmysql_query("SELECT usuario,passwd FROM usuarios WHERE 1",$conexion);

while (
$row mysql_fetch_array($sql)){
    if (
$login == $row['usuario'] && $password == $row['passwd']){
    
$_SESSION['control']= 1;
    break;
    }
    else
        
$_SESSION['control']= 0;
}
if (
$_SESSION['control'] == 1){
    
$_SESSION['estado']="logeado";
    
$_SESSION['ultimoAcceso'] = date("Y-n-j H:i:s");
    echo 
"Fecha del ultimo acceso al logearse: ".$_SESSION['ultimoAcceso']."<br>";
    }
    else if (
$_SESSION['control'] == 0)    
        
$_SESSION['estado']="no logeado";

y tambien dentro del cuerpo de la web, ejecutaria la funcion siguiente:

Código PHP:
function sesion_activa()            //Controla el periodo de inactividad de la sesion
{
$fechaGuardada $_SESSION['ultimoAcceso'];
echo 
"FECHA GUARDADA en la funcion sesion_activa: ".$fechaGuardada."<br>";
$ahora date("Y-n-j H:i:s");
echo 
"Fecha de la ultima vez que actualizo la pagina: ".$ahora."<br>";
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));
        
if(
$tiempo_transcurrido >= 1){    // Si pasaron 15 minutos o mas
    
session_destroy();
    
header("Location: index.php");
    }
    else
        
$_SESSION['ultimoAcceso'] = $ahora;

Creo que la causa por la que no me va, es que estan en el mismo archivo y entonces toman el mismo valor los dos tiempos que guardo...no es asi??
  #2 (permalink)  
Antiguo 25/02/2008, 11:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: problema al cerrar sesion por tiempo de inactividad....

Si llamas a las dos funciones en el mismo archivo, si serán iguales, pero en archivos subsecuentes, cambiara la hora, por lo que no creo que tengas problemas en los demás archivos al mandar llamar sesion_activa();

Saludos.
  #3 (permalink)  
Antiguo 25/02/2008, 12:11
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Re: problema al cerrar sesion por tiempo de inactividad....

Ok, gracias por contestar....mira, asi tengo estructurada el contenido de la web...

Código PHP:
<?
    
if ($dato == 0){
?>
<p class="ta11b" style="text-align:center;">
<? echo "Logeese o cree una cuenta nueva";?>
</p>
<?    }    
    else if (
$dato == 1/* Acceso al formulario de registro*/
            
formulario();
        else if (
$dato == 2/*Valida el formulario de registro enviado*/
            
valida_formulario();
            else if (
$dato == 3){/*Valida el nombre de usuario y la contraseña introducidas y controla el tiempo de sesion*/
                    
if ($_SESSION['estado'] == "no logeado")
                       echo 
"<font color='red'>Nombre de Usuario o Contraseña incorrectos</font color><br>";
                       else{
                              
header("location: adentro.php");
                           }
                           
            }
            else if (
$dato == 4)
                     include(
"tarjeta.htm");
                     
sesion_activa();
            
?>
Ahi si estarían bien llamadas cada una de las funciones no??La funcion valida_usuario se ejecutaría al pulsar el boton de envio del acceso de usuarios...
  #4 (permalink)  
Antiguo 25/02/2008, 12:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: problema al cerrar sesion por tiempo de inactividad....

Así es, si tienes bien validado de donde viene $dato, las funciones se ejecutaran en su tiempo correcto.

Saludos.
  #5 (permalink)  
Antiguo 25/02/2008, 12:32
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Re: problema al cerrar sesion por tiempo de inactividad....

El header(location) me da este error: Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\golftarjeta\estructura.php:18) in H:\xampp\htdocs\golftarjeta\estructura.php on line 106 y por lo que veo es un error muy comun...como puedo solucionarlo??intente hacerlo tambien de tal manera, que al logearse con exito te saliera un enlace hacia "adentro.php", pero en dicha página ha perdido todas las variables de sesion almacenadas..cuando tiene la misma estructura que las demas paginas...alguna idea??

adentro.php:

Código PHP:
<?
session_start
();

require_once(
"cont_funciones.php");

do_html_header();

estructura_cuerpo();

cuadro_login();
imagenes();
$dato=4;
contenido($dato);
do_html_footer();
?>
Siento preguntar tanto, pero es que estoy empezando y tengo bastantes problemillas....gracias de antemano!!
  #6 (permalink)  
Antiguo 25/02/2008, 12:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: problema al cerrar sesion por tiempo de inactividad....

Ese error te sale cuando envías contenido de texto al explorador, ya sea un salto de linea o codigo html, eso forza a PHP a enviar las cabeceras de html, y al tu tratar de enviar la cabecera de location te sale ese error.

Debes de cerciorarte que no envíes nada de contenido de HTML o texto antes de usar header().

Saludos.
  #7 (permalink)  
Antiguo 25/02/2008, 12:38
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 16 años, 10 meses
Puntos: 7
Re: problema al cerrar sesion por tiempo de inactividad....

Pero sería la linea anterior al header no??dos más arriba tengo esto....
Código PHP:
else if ($dato == 3){/*Valida el nombre de usuario y la contraseña introducidas y controla el tiempo de sesion*/
     
if ($_SESSION['estado'] == "no logeado")
            echo 
"<font color='red'>Nombre de Usuario o Contraseña      incorrectos</font color><br>";
            else if (
$_SESSION['estado'] == "logeado")
                       
header("location: adentro.php");

Pero es que si no pongo ese echo, no daría error al logearse mal...
  #8 (permalink)  
Antiguo 25/02/2008, 12:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: problema al cerrar sesion por tiempo de inactividad....

Si estas empezando con PHP, lo que mas te conviene es separar toda la logica de tu aplicacion asi evitaras este tipo de errores, algo asi:
Código PHP:
<?php
// procesos
if( algo() ) {
       
validar_algo();
} else {
      
$mensaje "error de usuario/contraseña";
}
?>
resultado HTML:
<font color='red'><?php echo $mensaje?></font><br>
Saludos.
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 20:16.