2013-04-24 101 views
12

我專用服務器來維護Memcached和存儲會話,以便我的所有服務器都可以毫無困難地在同一個會話中工作。無法訪問不同服務器上的會話變量

但不知何故,我想我可能誤解了Memcached關於PHP會話的可能性的含義。

我認爲我可以站在Apache 1 a.domain.com上創建會話,例如$_SESSION['test'] = "This string is saved in the session",然後轉到Apache 2 b.domain.comc.domain.com,並簡單地繼續會話並鍵入echo $_SESSION['test'];,它會輸出字符串。

它沒有,但我相信我被告知如果你有多個web服務器共享同一個會話,memcached將是一個很棒的工具。

我做錯了什麼?

enter image description here

順便說。我們非常需要詳細的教程或電子書來描述如何設置服務器,使用php,基於Memcached構建集羣等。

在我的php.ini文件它說:

session.save_path = "192.168.100.228:11211"

教程告訴我不要定義一個協議,並且IP地址已被給予Apache 3 - memcached服務器

這裏phpinfo()函數 enter image description here

的圖像中session.cookie_domain域不叫domain但它是一個.local。 該圖像已被更改。

編輯:

只是爲了信息。當我使用基於Memcached的簡單PHP命令時 - 一切正常。但不知何故,當我試圖保存會話時,memcached服務器不存儲該項目。

這工作:

<?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')); 
?> 

這不起作用

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

編輯2:解決方案

我注意到,刪除緩存歷史,包括餅乾等後瀏覽器沒有完成這項工作。問題仍然存在,原因是它掛在原始的單個會話ID上,這使得每個子域彼此分離。

此處定義的所有內容都是正確的,只要確保您的瀏覽器在您提出要求時重置其Cookie即可。 >。 <

+3

漂亮的圖形...... :) – Baba 2013-04-24 11:55:01

+3

謝謝..在Illustrator – Dimser 2013-04-24 11:55:36

+1

:) 5分鐘便可以添加完整的信息,您在'session.save_path'中有# – Baba 2013-04-24 11:56:55

回答

2

默認情況下(session)cookie是域特定的,所以在你的php中設置cookie域。INI

session.cookie_domain = ".domain.com" 

在此還看到 Allow php sessions to carry over to subdomains

確保重新啓動Web服務器,使更改後清除所有瀏覽器Cookie。如果您的Cookie具有相同的名稱但子域不同,您的瀏覽器可能會感到困惑。

其他檢查事項:

,這些會議每個單獨的服務器上正常工作。

確保使用phpinfo()正確設置會話處理程序,如果您正在處理大型代碼庫特別是繼承/第三方的東西,可能會有東西重寫它。

如果您使用的是第三方代碼 - 比如phpbb - 請檢查cookie設置是否正確。

(請注意這個答案整理清除頭腦風暴,保持所有相關信息)

+0

嗯..只是測試它..似乎也沒有工作。 – Dimser 2013-04-24 12:29:27

+0

增加了更多的東西去嘗試 – CodeMonkey 2013-04-24 12:34:24

+0

嗯.. memcached裏面沒有顯示任何東西,但我試圖在'page.php'頁面的'b.domain.com'上創建一個會話變量,然後在'page2.php中回顯變量'在同一臺服務器上。這工作得很好..但沒有任何存儲在Memcached在此期間 – Dimser 2013-04-24 12:36:39