Cita:
Iniciado por almarin
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;
}