2013-04-23 55 views
5

我一直在研究一個只能使用AJAX執行任務的web應用程序。它似乎工作得很好,但我遇到了一個問題,因爲我沒有在公共站點上存儲Session變量。在多個Apache服務器上使用會話數據庫

我的登錄程序與iCloud的類似。你到達一個頁面要求登錄。您的登錄信息將通過AJAX發送到服務器,並返回truefalse。如果爲true,則登錄框消失,並且您已準備好使用這些應用程序。

enter image description here

當你正在尋找在上圖中,你將看到兩個綠框爲完全相同的網站,沒有任何URL刷新或任何東西。它只是一個頁面。

粉紅色框代表尚未註冊任何Sessions的Apache服務器。我的課堂課程已使用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') 
    ); 

我似乎無法找出一種方法爲公共網站來索要pink服務器上的數據沒有會話ID。任何人都可以告訴我關於session_set_save_handler想法背後的想法,好像我6歲?我已經閱讀了PHP手冊的細節,但它真的讓我感到困惑。

如果有人知道這種溝通方式如何正常工作,請告訴我。所有的Apache服務器都通過局域網連接,並且能夠通信。他們也都可以在Apache包含庫中訪問相同的Session Class

+1

我建議序列化/反序列化'$ _SESSION'並將其存儲'Sessions'表內。 – BlitZ 2013-04-23 11:43:53

+0

但是,Apache服務器如何知道請求期間要處理哪個會話? – Dimser 2013-04-23 11:45:05

+0

當我沒有誤讀時:將新會話保存到一個表格中 - 在一箇中心位置 - 每個Apache服務器都可以讀取它? – bwoebi 2013-04-23 11:45:13

回答

2

看來您正在使用的問題可以使用分佈式會話來解決。

使用memcached,您可以爲任何連接的服務器可以共享的所有會話數據提供一箇中心點。

如果您使用的是linux,下面的代碼演示瞭如何註釋本地文件會話處理,並用memcache替換它可以讓您共享會話數據。

~$ 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" 

有關深入解釋,請訪問:http://bakery.cakephp.org/articles/rynop/2010/09/10/using-memcached-to-run-your-sessions

+0

你知道..它已經有一段時間,我實際上找到了相同的解決方案發布這個問題幾個星期後,但我得給你+1和正確的答案:),謝謝隊友。 – Dimser 2013-09-04 15:37:16

相關問題