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($_SESSION, true)."</pre>";
unset($_SESSION);
echo "Vettore \$_SESSION dopo unset():
session_id: ".session_id()."
<pre>".print_r($_SESSION, true)."</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.