Quando tu scrivi (esempio) $_SESSION['login'] = "si"; per autenticare l'utente dopo il login, e poi nelle pagine in cui è obbligatorio essere autenticati vai a vedere se $_SESSION['login'] esiste e che abbia il valore "si", in realtà quel $_SESSION['login'] = "si" che hai settato dopo il login, dove lo hai memorizzato? Sicuramente php lo deve tenere in memoria da qualche parte per darti il valore di $_SESSION['login'] anche dopo il login, no? Ecco come funziona: alla fine di ogni script, l'array $_SESSION viene serializzato in un file (che in genere ha il nome "sess_*id_della_sessione*") che viene creato nella cartella indicata da 'session.save_path'. Quando poi si riapre la stessa sessione, php internamente va ad aprire quel file, recupera il contenuto del file, ricrea l'array $_SESSION dal valore serializzato, e poi a fine script si ri-salvano le modifiche di $_SESSION nel file e si ripete il ciclo.

Questi file andranno prima o poi cancellati (sessioni inattive), o rigenerate. Sono temporanei.