2012-02-07 100 views
4

我正在寫一個全新的網站,如果我已經到了必須在負載平衡器的多臺機器上託管該網站的地步,我想確保它輕鬆擴展。PHP會話變量的替代選擇是什麼?

該網站的用戶可以進行身份​​驗證。換句話說,我需要保留一些狀態信息。我的第一個反應是使用會話變量,但然後我將被限制在一臺機器上。我知道有辦法在外面存儲會話變量(在數據庫,redis,memcached中),但這是唯一的選擇嗎?

會話變量的替代方法是什麼? Facebook和其他大型網站如何做到這一點?

P.S.我不在尋找另一個會話處理程序(DB,Redis等)。我想知道是否有辦法徹底擺脫會話變量。

+2

這是一個很好的問題,但是如果我可能提供一條不請自來的建議:在很多情況下,在項目的早期階段完全不擔心擴展問題。除非你正在做一些非同尋常的事情,否則我認爲會話存儲不太可能成爲瓶頸。 – Eli 2012-02-07 14:28:39

+0

我明白你的觀點Eli。但我並不擔心會話變量是一個瓶頸......我只是想確保服務不需要太多工作就可以擴展。它看起來像會話變量是要走的路。我在2012年有更好的方法來做到這一點...我會很有興趣知道StackOverflow是如何做到的...... – Martin 2012-02-07 14:53:39

回答

1

例如,您可以查看緩存,即使用Zend cacheAPC cache

+1

如果您至少可以鏈接到描述這些方法的文檔,用於分享每個用戶的狀態信息。 – Quentin 2012-02-07 14:24:01

8

曾聽說過session_set_save_handler?它允許您使用默認的PHP會話處理程序以外的機制(在tmp目錄中寫入sess_xxxxxxxxxxxx文件的機制)。

您可以編寫自己的使用數據庫的會話處理程序。這可能是一項耗時的任務;所以你可以暫時堅持默認的PHP會話處理程序,並在你準備好後透明地切換到數據庫。除了實現和插入六個會話處理函數的版本之外,您可能不必重寫任何代碼。

+0

賓果。爲了進一步回答這個問題,這就是Facebook所做的事情(通過memcached,IIRC)。 – ceejayoz 2012-02-07 14:25:13

+0

謝謝ceejayoz!是否有文章說明文件?我很驚訝知道Facebook使用會話變量... – Martin 2012-02-07 14:57:15

+0

爲什麼你會驚訝地知道這一點?例如,它們對於社交網絡所需的任何東西都是必需的 - 登錄狀態。 – ceejayoz 2012-02-07 20:17:34