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:
Codice PHP:
if (!isset($_SESSION)) {
  
session_start();

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.
Metti il session_start() e basta.