Cosa succede quando lanci il comando session_start()?
Succede che PHP avvia la sessione inizializzando il vettore $_SESSION e definendo l'ID di sessione che puoi leggere attraverso session_id().

Se scrivi
Codice PHP:
<?php
session_start
();
unset(
$_SESSION);
con l'unset() non fai altro che distruggere quello che hai appena creato con session_start().
Come ti dicevo prima, non serve quasi mai fare l'unset di tutto il vettore $_SESSION, ma solo delle variabili in esso contenute che vuoi eliminare o che il nuovo processo (nel tuo caso l'autenticazione) dovrà ridefinire.

La prova è questa:

Codice PHP:
<?php
session_start
();

echo 
"Vettore \$_SESSION dopo la funzione session_start():

session_id: "
.session_id()."

<pre>"
.print_r($_SESSIONtrue)."</pre>";

unset(
$_SESSION);

echo 
"Vettore \$_SESSION dopo unset():

session_id: "
.session_id()."

<pre>"
.print_r($_SESSIONtrue)."</pre>";

Come ti consigliavo prima, scrivi:

Codice PHP:
unset($_SESSION['elemento_da_eliminare']);
// invece di:
unset($_SESSION);

// Oppure:
unset($_SESSION['a'], $_SESSION['b'], $_SESSION['c'], ...);
// se vuoi eliminare più elementi con una sola istruzione.