Sicuramente le sessioni.
I cookie, visto che vengono salvati lato client, sono molto facilmente modificabili/leggibili.
I dati delle sessioni sono salvati lato client, quindi l'utente non può in alcun modo manipolarli. Il legame tra client e server è dato dal SID, una chiave univoca random (penso), salvata in un cookie. Il server, conoscendo il SID, può associare i dati salvati dell'utente.
Per la durata, forse, potresti usare
session_cache_expire(), ma è meglio salvare (ad esempio) nella sessione, il timestamp di creazione. Quindi, se time() - $_SESSION['tempo_inizio'] < K (dove K lo puoi decidere te), allora ...
Impostare la data di scadenza nei cookie, è facilissimamente aggirabile, perché, come detto sopra, l'utente può gestirli come vuole, visto che vengono salvati lato client.
Ciao!
Ciao!