2012-02-03 17 views
12

he creado un proyecto en PHP, en el que administro sesiones.cómo caducar la sesión de php si el usuario está inactivo durante 15 minutos

Estoy creando sesión en mi archivo config.php escribiendo la siguiente línea de código.

session_start(); 

y para destruir esta sesión, en el archivo logout.php tengo escrita la siguiente línea.

session_destroy(); 

y no he mencionar ningún código para la sesión en cualquier otro archivo de proyecto, pero el problema es sesión está activa hasta que yo llamo logout.php,

Lo que quiero es sesión debe expirar si el usuario es inactivo por 15 minutos.

alguien me puede ayudar para esto, soy nuevo en PHP, por favor, dar un código de ejemplo o un enlace para lograrlo ..

+1

http://bytes.com/topic/php/answers/686406-php-session-time-limit – tekknolagi

+0

también http://stackoverflow.com/questions/520237/how-do-i-expire -a-php-session-tras-30-minutos – tekknolagi

+0

también http://stackoverflow.com/questions/3002975/set-expire-time-for-a-session – tekknolagi

Respuesta

15

llamada a continuación la función en el archivo de cabecera, de modo que cada vez que el usuario hace cualquier actividad en esa página el tiempo se actualiza y comprobar si los tiempos de espera de sesión o no.

function auto_logout($field) 
{ 
    $t = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 1500 || !isset($t0)) 
    {   
     return true; 
    } 
    else 
    { 
     $_SESSION[$field] = time(); 
    } 
} 

usar algo como esto en la cabecera

if(auto_logout("user_time")) 
    { 
     session_unset(); 
     session_destroy(); 
     location("login.php");   
     exit; 
    }  

User_time es el nombre de la sesión. Espero que esta respuesta te ayude. Lo que realmente hace este código es: "Comprueba si la diferencia es mayor de 1500 segundos o no. De lo contrario, establezca un nuevo tiempo de sesión". Puede cambiar la diferencia de tiempo (1500) de acuerdo con su requerimiento.

+0

solo una pregunta kamal, ¿cómo puedo crear una sesión con el nombre 'user_time', porque solía simplemente escribir' session_start() ' – mack

+0

Necesita escribir $ _SESSION ['name']; – Kamal

+0

gracias kamal, funcionó para mí – mack

1

se puede usar algo como esto

# Session Logout after in activity 
function sessionX(){ 
    $logLength = 1800; # time in seconds :: 1800 = 30 minutes 
    $ctime = strtotime("now"); # Create a time from a string 
    # If no session time is created, create one 
    if(!isset($_SESSION['sessionX'])){ 
     # create session time 
     $_SESSION['sessionX'] = $ctime; 
    }else{ 
     # Check if they have exceded the time limit of inactivity 
     if(((strtotime("now") - $_SESSION['sessionX']) > $logLength) && isLogged()){ 
      # If exceded the time, log the user out 
      logOut(); 
      # Redirect to login page to log back in 
      header("Location: /login.php"); 
      exit; 
     }else{ 
      # If they have not exceded the time limit of inactivity, keep them logged in 
      $_SESSION['sessionX'] = $ctime; 
     } 
    } 
} 

Pero recuerde Función sessionX() debe venir después de session_start()

Ver detalles here

+0

si escribo este código en mi archivo 'config.php' solo, ¿esto funcionará para todo el proyecto, ya que mi 'config.php' está incluido en todos los demás archivos del proyecto? – mack

+0

supongo que usa las cookies – mack

4

tratar

ini_set('session.gc_maxlifetime',54000); 
    ini_set('session.gc_probability',1); 
    ini_set('session.gc_divisor',1); 

uso de este antes de llamar a session_start()

+0

si escribo estas 3 líneas en mi archivo 'config.php' antes de' session_start() '¿funcionará para todo el proyecto? como 'config.php' está incluido en todos los demás archivos de proyecto – mack

+0

sí, esto funciona para cada proyecto que incluya config.php – user1186779

+0

bien, a continuación está el código en mi' config.php' ver ¿funcionará? ' ' – mack

1

Sé que esta es una pregunta contestada, pero solo quería compartir mi experiencia y porque siento que este es un enfoque más fácil. No estoy seguro de si esta es la mejor manera, pero aquí va. Lo que hice fue:.

  1. puse una sesión de PHP ($ _SESSION [ 'tiempo de espera']) a la hora (time()) cuando el usuario ha iniciado sesión en

  2. escribió la siguiente función para validar si el usuario está activo.

función sessionTimeout() {

// Esta función es la adición de 900 segundos (15 minutos, que es la cantidad de tiempo que desea que el usuario // estar inactivo cerrar la sesión automáticamente) a el tiempo previamente registrado cuando el usuario estuvo activo por última vez.// Luego, verifica si la hora actual es mayor que la cantidad de tiempo que desea que el usuario // permanezca conectado sin agotar el tiempo de espera (que es de 15 minutos). Si es mayor, se le redirige a la // página de inicio de sesión donde puede iniciar una función de cierre de sesión con http://www.yourwebpage/login.php?status=timeout en la URL.

if ($ _SESSION [ 'tiempo de espera'] + 900> time()) {

// User Active so reset time session. 
    $_SESSION['timeout'] = time(); 

} else {

// session timed out then redirect to login page 
    header('Location:http://'. $_SERVER[HTTP_HOST] . '/login.php?status=timeout'); 

}

}

Por último: llamar a sessionTimeOut(); función en el encabezado después de verificar si el usuario está conectado. Esto permite llamar a la función cada vez que el usuario actualiza o navega a una página nueva. Por lo tanto, funciona perfectamente (al menos en mi caso), cumple mi propósito, así que pensé en compartirlo con ustedes.

-1

Esto es una continuación de lo que Kamal publicó. Probé mismo código, pero hice que funcionara mediante la modificación como abajo:

/* code */ 
function fnlogout($field) 
{ 
    $t = time(); 
    if (!isset($_SESSION[$field])) 
     $_SESSION[$field] = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 60) 
    {   
     return true; 
    }enter code here 
    else 
    { 
     return false; 
    } 
} 
function fnheader() 
{ 
    if(fnlogout("user_time")) 
    { 
     session_unset(); 
     session_destroy(); 
     header("location:index.php?action=expired"); 
     exit; 
    } 
} 

Sí, Kamal es correcto sobre la localización de las inserciones de código. Una parte como función y otra en el encabezado de cada archivo o función de encabezado común.

2

tienda time() en la variable $time. crear una variable llamada $setTime y establecer el tiempo que desea que el usuario expire.

Después de eso, compruebe que $_SESSION['setTime'] está vacío O no establecido, guarde el valor de tiempo de espera en la sesión; de lo contrario, cuando la página actualice, el nuevo valor se asignará al $_SESSION['setTime'].

$time = time(); 
    $setTime = time() + 60; 
    if (empty ($_SESSION ['setTime']) || !isset ($_SESSION ['setTime'])) { 
     $_SESSION ['setTime'] = $setTime; 
    } 

Después de que el registro que el tiempo actual es más que igual al tiempo almacenado. y si se desarma la sesión. destruir la sesión también.

if (time() >= (int) $_SESSION ['setTime']) { 
    session_unset(); 
    session_destroy(); 
} 
Cuestiones relacionadas