Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/06/2008, 07:13
Sancas
 
Fecha de Ingreso: marzo-2008
Mensajes: 96
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Duración de sesiones

Cita:
Iniciado por almarin Ver Mensaje
Hola:

Cuando estableces gc_maxlifetime, símplemente dices el tiempo máximo de sesión, pero siempre que el recolector de basura de sesiones (garbage collection, de ahí lo de gc_...) se ejecute. El GC no se ejecuta SIEMPRE, sino que hay una probabilidad de que se ejecute, que por defecto es:

session.gc_probability = 1
session.gc_divisor = 100

Es decir, se ejecutaría un 1% de las veces que ejecutes tu script. Por eso, si estás programando en local y sólo eres tu quien está haciendo peticiones a tu servidor web, hay muy poca probabilidad de que el gc se ejecute.

Para mantener un control más fino, te recomiendo que hagas algo como esto:
Código PHP:

    
if (($_SESSION['session_time']+$conf['session']['time'])<time()){
        
$_SESSION=array();
        
header('location: '.__BASE."login.php?referer=".urlencode($_SERVER['PHP_SELF']));
        exit;
    }else{
        
$_SESSION['session_time']=time();
    } 
Que no es, ni más ni menos, que ir guardando en la sesión el timestamp de la última operación que se realizó, y si es mayor a un número dado (yo lo indco como $conf['session']['time']), entonces caduca.

Espero que te sea de ayuda.
Juas, me has matado, amigo.
No entendí nada del código xD Aún soy bastante cazurro.
No ejecuto en local, está colgado de mi página. En este caso se refiere al mantenimiento y administración, el cual sólo manejo yo, pero cuando meta área de usuarios habrá más gente con sesiones...

No se puede poner el recolector a 100%?
Quedando el script de esta manera:

Código PHP:
if (!isset($_SESSION) || empty($_SESSION))
{
ini_set("session.gc_probability","100"); //así 100 / 100 = 1 xD
ini_set("session.gc_maxlifetime","1200");
    
session_start();
}
if(empty(
$_SESSION['nombresesion']))
{
header("location:form_login.php");
exit;