2013-04-24 27 views
12

Ho dedicato un server per conservare Memcached e archiviare le sessioni, in modo che tutti i miei server possano lavorare sulla stessa sessione senza difficoltà.Impossibile accedere alle variabili di sessione su server diversi

Ma in qualche modo penso di aver frainteso il significato delle possibilità di Memcached sulle sessioni di PHP.

Ho pensato che sarei riuscito a stare su Apache 1 a.domain.com e creare una sessione, ad es. $_SESSION['test'] = "This string is saved in the session" e quindi vai ad Apache 2 b.domain.com o c.domain.com e semplicemente continua la sessione e digita echo $_SESSION['test']; e emetterebbe la stringa.

Non è così, ma sono sicuro che mi è stato detto che memcached sarebbe un ottimo strumento se si hanno più server web per condividere la stessa sessione.

Cosa ho fatto di sbagliato?

enter image description here

proposito. Abbiamo seriamente bisogno di un tutorial o ebook completamente dettagliato per descrivere come configurare il server, usando php, creando cluster ecc. Basati su Memcached.

Nel mio file php.ini si dice:

session.save_path = "192.168.100.228:11211"

Tutorial mi ha detto di non definire un protocollo, e l'indirizzo IP è stato dato alla Apache 3 - memcached Server

Ecco un'immagine di phpinfo() enter image description here

Il dominio in session.cookie_domain non si chiama domain ma è un 0.123.. È stato modificato per questa immagine.

EDIT:

Solo per informazioni. Quando sto usando un semplice comando PHP basato su Memcached, tutto funziona perfettamente. Ma in qualche modo quando sto cercando di salvare una sessione, il server memcached non memorizza l'elemento.

Questo funziona:

<?php 
$m = new Memcached(); 
$m->addServer('192.168.100.228', 11211); 

$m->set('int', 99); 
$m->set('string', 'a simple string'); 
$m->set('array', array(11, 12)); 
/* expire 'object' key in 5 minutes */ 
$m->set('object', new stdclass, time() + 300); 


var_dump($m->get('int')); 
var_dump($m->get('string')); 
var_dump($m->get('array')); 
var_dump($m->get('object')); 
?> 

Questo non funziona

<?php 
session_start(); 
$_SESSION['name'] = "This is a simple string."; 
?> 

EDIT 2: LA SOLUZIONE

ho notato che dopo l'eliminazione della cronologia della cache tra cui i cookie etc. la il browser non ha completato il lavoro. Il problema continuava a causa del fatto che si aggrappava all'id della singola sessione originale, che rendeva ogni sottodominio separato l'uno dall'altro.

Tutto qui definito è corretto, basta assicurarsi che il browser ripristini i suoi cookie quando lo chiedi. >. <

+3

bella grafica ..... :) – Baba

+3

Thanks .. :) 5 minuti nel illustratore – Dimser

+1

si può aggiungere tutte le informazioni che si avere in 'session.save_path' – Baba

risposta

2

Per impostazione predefinita (sessione) i cookie sono specifici del dominio, quindi imposta il dominio dei cookie nel tuo php.ini

session.cookie_domain = ".domain.com" 

vedi anche qui Allow php sessions to carry over to subdomains

Assicurati di riavviare il server web e cancellare tutti i cookie del browser dopo aver effettuato la modifica. Il tuo browser potrebbe confondersi se hai i cookie con lo stesso nome ma sotto diversi sottodomini.

Altre cose da controllare:

che le sessioni funzionano bene su ogni singolo server.

Assicurarsi che il gestore di sessione sia impostato correttamente utilizzando phpinfo() se si sta lavorando con una base di codice di grandi dimensioni, in particolare di materiale ereditato/di terze parti, potrebbe esserci qualcosa che lo sovrascrive.

Se si utilizza codice di terze parti, ad esempio phpbb, per esempio, verificare che anche le impostazioni dei cookie siano corrette.

(si prega di notare questa risposta riordinato per rimuovere il brainstorming, mantenuto tutte le informazioni rilevanti)

+0

Hmm .. Appena testato .. Non sembra funzionare neanche. – Dimser

+0

aggiunto più cose da provare – CodeMonkey

+0

Bene .. Non viene mostrato nulla all'interno di memcached, ma ho cercato di creare una variabile di sessione su 'b.domain.com' a pagina' page1.php' e quindi di echoare la variabile a 'page2.php sullo stesso server. Ciò ha funzionato bene .. Ma nel frattempo non è stato memorizzato nulla in Memcached – Dimser

Problemi correlati