La sessione puo' scadere per due ragioni.

1) lato client perche' l'utente ha chiuso il browser
2) lato server per inattivita' stabilita dal time-out.

Quello che vedi potrebbe essere il contenuto della cache del browser. Ragione per cui non e' mai consigliabile mettere dei dati sensibili nel file di sessione. sia per la cache del browser sia per la possibilita' di lettura del file di sessione normalmente disponibile a tutti gli utenti. Se lo fai per test ok, ma in produzione proprio no.

lato server viene letta la data/ora ultima apertura del file di sessione (scritta nel file stesso). Se momento attuale - time out > data/ora attuale la sessione viene considerata scaduta.

E' pure possibile che essendo il cookie di sessione ancora valido venga recuperata la stessa sessione. Potresti mettere un tuo controllo all'interno del file ed in caso di time out azzerare il contenuto della sessione. per esempio:

file check1.php:
Codice PHP:
<?php
session_start
();
echo 
session_id();
echo 
"
<pre>"
;
print_r($_SESSION);

$_SESSION['check'] = time();
$_SESSION['name'] = 'pippo';
$_SESSION['pwd'] = 'pallino';


?>

[url="check2.php"] vai al check2 [/url]
aspetta 10 secondi e poi vai al file check2.php
Codice PHP:
<?php
session_start
();
echo 
session_id() ."
<pre>" 
;
print_r($_SESSION);

$timeout '10';  // 10 secondi tanto per provare
if(isset($_SESSION['check']) and ($_SESSION['check'] + $timeout) < time() )  {

$_SESSION = array();

}
echo 
"contenuto del file di sessione dopo il check di timeout
"
;
print_r($_SESSION);
?>

[url="check1.php"] vai al check1 [/url]
come potrai vedere se e' scattato il time out verra' svuotato il file di sessione. Volendo puoi impostare tu stesso il tempo di sessione valida a prescindere dall'impostazione del php.ini

Decidi tu quando e se svuotare il file.... se poi metti anche session_regenerate_id() ti cambiera' anche l'id.