tu nel cookie metti solo un codice ... l'utente può alterare il codice ma non il contenuto

l'utente in pratica potrebbe, POTENZIALMENTE, acquisire l'id di un altro utente ... ma per ridurre le probabilità al minimo si usano degli hash grandicelli, come ad esempio lo sha512, e si rigenera l'hash di sessione per ogni richiesta ... così da rendere la vita impossibile a chi vuol far danni

purtroppo l'http è connection less, quindi il webserver non sa con certezza che tu ... sei tu ... perché la connessione viene chiusa e riaperta a rotazione, non c'è continuità

il motivo per il quale si mette l'id di sessione nei cookie e proprio per "simulare" quella continuità

ogni sessione ha una scadenza, non devi fare altro che ad ogni accesso aggiornare il timestamp (www.php.net/time ) presente sul database relativo all'ultima operazione svolta
ovviamente prima verifichi se la sessione è valida (nel momento del caricamento) tramite un if del tipo
if (time() > ultima_azione_sessione + (30*60)) { ... la sessione deve essere creata ex novo perché è scaduta ... }