Non ho letto tutto il casino che hai fatto sul codice, perché il problema è comunque da un'altra parte, non sul cookie.
Se la sessione scade dopo circa 20 minuti (immagino siano minuti di inattività), dipende dal valore di php.ini session.gc_maxlifetime, che di base è impostato a 1440 (è un valore in secondi, cioè 24 minuti). Se vuoi allungare le sessioni devi modificare quello (e riavviare apache)