session.cache_expire=180, entiendo que mueren solas
No, no es esa directiva no define la duración de una sesión .. en principio (y última instancia) lo defina la directiva: session.gc_maxtimelife (de tu php.ini). En combinación con session.cookie_expire (si es que propagas el SID en cookies vía session.use_cookies a ON).
Sobre el tema de "matar" una sesión .. debes usar session_destroy() ..
La función session_unset() no se usa si usas los arrays superglobales: $_SESSION
Fijate en la documentación oficial:
http://www.php.net/session_destroy
Ese "script" (código) ha de ser ejecutado como una petición nueva al servidor .. es decir .. no en el mismo script que posteriormente registras unas variables de sesión .. sino que sea un "logout.php" por ejemplo que llames y al final de este redirecione a donde corresponda (en tu caso a esa misma página) .. Las variables de sesión o "destrucciones" de una sesión no quedan habilitadas (disponibles) hasta que se hace una nueva petición al servidor (que se pida un link nuevo de un script o página .. que se recarge la página .. etc).
Para redireccionar puedes usar header("Location: dondesea.php") ..
Podrías hacer algo tipo:
Código PHP:
<?
session_start();
if (isset ($_SESSION['nombre'])){
// Si está una sesión activa -> mata sesion
// todo el código del link del manual oficial de PHP que te dejé .. +
// redireccionar aquí mismo ..
header ("Location: $_SERVER['PHP_SELF']");
exit;
}
// resto de tu actual código (desde tu include() hacia abajo ..)
?>
También tienes la función session_regenerate_id() para regenerar el ID de sesión .. revisalo.
PD: .. un comentario: ¿para que usas una variable "autentificado" de sesión para decir "si" .. si ya registras otras variables como ese "ID" de usuario y otras varaibles? .. basate en la existencia de alguna de esas otras variables para ver que tu sesión está activa en lugar de usar una variable más extra para una cosa que ya tienes por otro lado implementado y lo usas.
Por otro lado .. no sé para que guardas tu "session_id()" en una variable de sesión .. ese dato lo tienes siempre bajo esa llamada de tu función session_id() .. no es necesario propagarlo en una variable de sesión .. es redundante.
Un saludo,