Troppo codice e al momento non ho tempo da dedicarci per capire tutto ciò che succede, ma una cosa che salta subito all'occhio (che non ha a che fare col problema) è questa:
l'if è inutile, l'isset sarà sempre falso, finché non si esegue il session_start() la variabile $_SESSION per lo script non è accessibie e quindi non esiste.Codice PHP:
if (!isset($_SESSION)) {
session_start();
}
Metti il session_start() e basta.