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.