Ho riletto tutto. Come suggerisce Fabio, se inserisci l'id di sessione nel db allora confronta quell'id e non quello passato da $_SESSION. Altrimenti sarebbe inutile mettercelo.

Quando estrai l'id di sessione da db, metti nelle condizioni where la scadenza, in modo che se non estrai dati (result record = 0) sai che o si tratta o di id di sessione inesistente, oppure di tempo scaduto e allora distruggi la sessione.

$_SESSION = array();
session_destroy();