2013-04-23 10 views
5

Ho lavorato a una webapp che dovrebbe essere in grado di eseguire attività solo utilizzando AJAX. Sembra funzionare piuttosto bene, ma sto incontrando un problema, perché non memorizzo le variabili Session sul sito pubblico.Utilizzo del database di sessione su più server Apache

La mia procedura di accesso è simile a quella di iCloud. Si arriva a una pagina che richiede un login. Il tuo login viene inviato a un server utilizzando AJAX e restituisce un true o false. Se è vero, la casella di accesso scompare e sei pronto per lavorare con le applicazioni.

enter image description here

Quando si sta guardando l'immagine qui sopra, vedrete le due caselle verdi come l'esatto stesso sito, senza rinfresca URL o niente. È semplicemente la stessa pagina.

Le caselle rosa rappresentano i server Apache che non ha registrato alcun Sessions. La mia sessione è stata creata utilizzando l'idea session_set_save_handler.

session_set_save_handler(
     array($this, 'open'), 
     array($this, 'close'), 
     array($this, 'read'), 
     array($this, 'write'), 
     array($this, 'destroy'), 
     array($this, 'gc') 
    ); 

io non riesco a trovare un modo per il sito pubblico di chiedere per i dati a pink server senza un ID di sessione. Qualcuno potrebbe dirmi l'idea dietro l'idea session_set_save_handler come se avessi 6 anni? Ho letto il manuale PHP per i dettagli, ma mi confonde davvero.

Se qualcuno sa come questo metodo di comunicazione potrebbe funzionare correttamente, la prego di dirmelo. Tutti i server Apache sono connessi tramite una rete LAN e sono in grado di comunicare. Inoltre hanno tutti accesso allo stesso Session Class in una libreria di inclusione di Apache.

+1

suggerisco di serializzare/deserializzare '$ _SESSION' e conservarla all'interno di' tavolo Sessions'. – BlitZ

+0

Ma in che modo un server Apache saprà quale sessione gestire durante una richiesta? – Dimser

+0

Quando non ho letto male: salvi la nuova sessione in una tabella - in un punto centrale - da dove ogni server Apache può leggerlo? – bwoebi

risposta

2

Sembra che il problema che si sta avendo può essere risolto utilizzando sessioni distribuite.

Utilizzando memcached è possibile fornire un punto centrale per tutti i dati di sessione condivisibili da qualsiasi server connesso.

Se si utilizza Linux, il codice riportato di seguito mostra come commentare la gestione locale della sessione di file e sostituirlo con memcache può consentire di condividere i dati della sessione.

~$ cat /etc/php5/apache2/php.ini | grep -i session 
    [Session] 
    ;session.save_handler = files 
    session.save_handler = memcache 
    session.save_path = "tcp://127.0.0.1:11211" 

Per una spiegazione approfondita visita: http://bakery.cakephp.org/articles/rynop/2010/09/10/using-memcached-to-run-your-sessions

+0

Sai .. È stato un po 'e ho effettivamente trovato la stessa soluzione a poche settimane dopo aver postato questa domanda, ma devo darti +1 e risposta corretta :), grazie amico. – Dimser

Problemi correlati