Tutti gli altri articoli sono buoni suggerimenti. Un altro è questo: non utilizzare lo stato della sessione se non ne hai assolutamente bisogno.
Memorizzazione di sessione in un database è (generalmente) una cattiva idea per un paio di motivi semplici:
utilizzo tipico della sessione è quello di evitare di dover caricare i dati comuni alle diverse volte del server di database. Se la sessione è memorizzata nel server db, beh, in realtà non hai fatto molto.
La sessione deve essere serializzata e deserializzata per ogni singola pagina di esecuzione. Ciò significa che i dati di sessione dovrebbero essere recuperati dal server e scritti sul server ogni singola pagina caricata indipendentemente dal fatto che lo si usi o meno.
Nella mia esperienza è molto meglio servita per tirare semplicemente i dati dal server di database quando realmente bisogno. Nella maggior parte dei casi, le persone mettono in sessione tutti i tipi di dati di breve durata semplicemente perché pensano di risolvere un problema di prestazioni, quando in realtà peggiorano la situazione.
Inoltre, se si limita la quantità di dati verso il basso (ad esempio, un id utente, un nome o qualcosa del genere), è possibile archiviarlo in un client di cookie crittografato e non doversi preoccupare affatto.
MemCache è un'opzione; ma di nuovo guarderei seriamente all'utilizzo del database e vedere se è possibile ottimizzare le query e gli schemi prima di tutto.
+1 per la menzione di memcached –