Domanda

PHP memorizza le informazioni sulla sessione nel file system dell'host del server che stabilisce quella sessione.In un ambiente PHP con più host, dove il carico è distribuito in modo non intelligente tra ciascun host, le variabili di sessione PHP non sono disponibili per ciascuna richiesta (a meno che per caso la richiesta non sia assegnata allo stesso host - supponiamo di non avere alcun controllo sul bilanciatore del carico) .

Questo sito, soprannominato "La guida per gli autostoppisti al bilanciamento del carico PHP" suggerisce di sovrascrivere il gestore della sessione PHP e di memorizzare le informazioni sulla sessione nel database condiviso.

Qual è, secondo il tuo modesto parere, il migliore modo per mantenere le informazioni sulla sessione in un ambiente host PHP multiplo?

AGGIORNAMENTO: Grazie per l'ottimo feedbackPer chiunque cerchi un codice di esempio, abbiamo trovato un file utile tutorial sulla scrittura di una classe Session Manager per MySQL che consiglio di verificare.

È stato utile?

Soluzione

Database o Database+Memcache.In generale non si dovrebbe scrivere alle sessioni molto spesso.Inizia con una soluzione di database che scrive nel db solo quando sono presenti i dati della sessione cambiato.Memcache dovrebbe essere aggiunto in seguito come miglioramento delle prestazioni.Una soluzione db sarà molto veloce perché stai solo cercando le chiavi primarie.Assicurati che il db abbia il blocco delle righe, non il blocco delle tabelle (myISAM).Solo MemCache è una cattiva idea...In caso di overflow, arresto anomalo o riavvio, gli utenti verranno disconnessi.

Altri suggerimenti

Qualunque cosa tu faccia, non memorizzarla sul server stesso (anche se stai utilizzando un solo server o in uno scenario di failover 1+1).Ti metterà in un vicolo cieco.

Direi di usare Database+Memcache per l'archiviazione/recupero, ti terrà fuori dalla portata di Zend (e credimi, le cose ad un certo punto si guastano con Zend).Dal momento che sarai in grado di partizionare facilmente in base all'ID utente o all'ID sessione, anche l'utilizzo di MySQL lascerà le cose abbastanza scalabili.

(Modificare:inoltre, utilizzare DB+Memcache non ti vincola a un gruppo commerciale, non ti vincola nemmeno a PHP - qualcosa di cui potresti essere felice in futuro)

La memorizzazione dei dati della sessione in un database condiviso funziona, ma può essere lenta.Se è un sito davvero grande, memcache è probabilmente un'opzione migliore.

A seconda del budget del tuo progetto, potresti anche prendere in considerazione Zend Platform per le tue macchine di produzione, che oltre a una serie di altre fantastiche funzionalità, include il clustering di sessioni configurabile, che funziona un po' come fa una CDN.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top