Mysql
 sql >> Database >  >> RDS >> Mysql

Variabili di sessione:quanti dati sono troppi?

Innanzitutto, le sessioni PHP non sono archiviate in memoria per impostazione predefinita , sono archiviati su disco, quindi ogni blocco/sessione su cui scrivi occuperà spazio su disco e non memoria (fino a quando non utilizzerai PHP per leggere i dati della sessione).

Sì, sei potenzialmente più efficiente, ma non se vuoi scalare ed ecco perché:


Memorizzazione dei dati nelle sessioni

È perfettamente accettabile conservarne alcuni dati nelle sessioni. In teoria, non c'è limite (anche se non ho mai provato a romperlo o addirittura a spingerlo, basta passare a una soluzione più efficiente). Tuttavia, sarai limitato dallo spazio su disco e da PHP memory_limit() .

Spesso, i dati archiviati nelle sessioni includono cose come:

  • Nomi utente
  • Hash
  • Date di registrazione
  • Altre variabili (ID gruppo utenti/chiavi ecc.)
  • Messaggi flash
  • (NON password!)

Tuttavia, c'è un compromesso. Se il tuo traffico (e utilizzo) aumenta e stai archiviando molti dati in $_SESSION , molto probabilmente inizierai a notare problemi, sia in termini di utilizzo del disco che della memoria.

Non credo che ci siano problemi con ciò che stai suggerendo, ma al di là degli elementi che hai elencato e in cui gli esempi sopra si sovrappongono, è necessario prestare attenzione.

Se desideri ridimensionare (orizzontalmente) e conservare le sessioni basate su disco, hai delle opzioni ( sessioni persistenti o storage area network sono un paio) poiché il disco su un server non memorizza le stesse sessioni di un disco su un altro server.


Posizione dei dati della sessione

Puoi trovare la posizione in cui PHP memorizza i dati della sessione chiamando: session_save_path()

o sulla CLI:

php -r 'echo session_save_path(), "\n";'

Non hai menzionato il tuo sistema operativo, ma le posizioni comuni per i file di sessione (in diversi tipi di sistema operativo) sono:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Le sessioni archiviate su disco di solito hanno nomi di file simili a questo utilizzando ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Vale la pena notare che spesso ci sono processi di raccolta dei rifiuti che ripuliscono le sessioni morte dopo periodi specifici. Varia in base al sistema operativo, ma di solito sono presenti con varie installazioni basate su LAMP.


Altre opzioni/approcci per l'archiviazione delle sessioni

Nel tuo database
I dati delle sessioni sono spesso archiviati in un database anziché su un disco locale e questo funziona bene sia per i siti micro, piccoli che (a seconda di come viene eseguita) con un livello di traffico ragionevole.

Come qualsiasi altra soluzione, ha i suoi pro e contro (come essere in grado di bandire/cacciare un utente eseguendo una query piuttosto che eliminare un file di sessione da /tmp )

In memoria
per i siti più grandi (traffico più elevato) e in particolare dove il volume di utenti simultanei è elevato, la memoria è più veloce da leggere/scrivere per variabili o dati a cui si accede molto frequentemente invece di aggiungere un carico eccessivo al database. Può e deve ancora essere scritto nel DB (consultare caching-through di scrittura ), ma anche mantenuti in memoria per un accesso efficiente.

Una tecnica di particolare pregio è il memory caching . Un esempio di soluzione open source compatibile con PHP ampiamente utilizzato è Memcached , che può essere utilizzato su uno o più server [distribuiti]. L'ho visto utilizzato sia dalle piccole imprese che dalle grandi e devi solo guardare chi lo usa/contribuisce...