Ciao,
la durata di una sessione viene determinata da due fattori:

se usi i cookie

1) la durata del cookie che invii all'utente per identificarlo

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

2) il tempo che intercorre tra la scadenza del file con i dati di sessione

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

e quello in cui la garbage collection si accorge di questa scadenza (default ogni 1/100 accessi totali alle sessioni)

; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

session.gc_probability = 1
session.gc_divisor = 100


Se invii l'id di sessione attraverso l'url l'unica scadenza che ti interessa è quella relativa a al punto 2.

Detto questo, per far sì che il proprietario di una sessione posa accedervi soltanto per n minuti dall'ultimo accesso, il modo più semplice è fare così

session_start() ;

//5 minuti
$tempo_timeout = 300 ;

//now
$now= time() ;

if(!isset($_SESSION['utente'])){

//codice...codice...codice

$_SESSION['utente']= $utente ;
$_SESSION['last_in'] = $now ;

}

elseif( ($now - $_SESSION['last_in']) < $tempo_timeout){

$_SESSION['last_in'] = $now ;
//codice..codice...codice

}
else{

$_SESSION=array() ;
session_destroy() ;

echo('Spiacenti sessione scaduta') ;

}

non l'ho testata ma funziona più o meno così