allora innanzitutto sarebbe opportuno salvare, sempre che tu ce l'abbia, un timstamp e la session_id nel db, poi fai un confronto del time depositato nel db con il time attuale.
dal db chiami il time corrispondente alla sessione in questione:

$sql = "SELECT time FROM $tabelle_db WHERE user = '$_SESSION[user]'";

e lo confronti, se è piu grande di 30 min... mandi l'utente in logout con un header, se invece e piu piccolo di 30 min fai semplicemente un update del time e risalvi il time attuale nel db.

Codice PHP:
$sql "SELECT time FROM $tabelle_db WHERE user = '$_SESSION[user]'";
    
$result mysql_query($sql);
    while(
$row mysql_fetch_assoc($result))
    {
        
$time_alt=$row['time'];
    }
    
$diff $time $time_alt;
    if(
$diff >= $timeout//manda in logout
    
{
        
//spiacente tempo scaduto...";
        
header("location:$redirect?logout=1&user={$_SESSION['user']}");
    }
    else 
//altrimenti sessione ancora valida aggiorna il time
    
{
        
$query "UPDATE $tabelle_db SET time='$time' session='$_SESSION[id]' WHERE user = '$_SESSION[user]'";    
        
$dummy mysql_query($query) or die (mysql_error());    
    }