1. 程式人生 > >【session共享】如果有多臺機器,怎麼解決Session共享問題

【session共享】如果有多臺機器,怎麼解決Session共享問題

【 問題由來】

首先我們應該明白,為什麼要實現共享,如果你的網站是存放在一個機器上,那麼是不存在這個問題的,因為會話資料就在這臺機器,但是如果你使用了負載均衡把請求分發到不同的機器呢?這個時候會話id在客戶端是沒有問題的,但是如果使用者的兩次請求到了兩臺不同的機器,而它的session資料可能存在其中一臺機器,這個時候就會出現取不到session資料的情況,於是session的共享就成了一個問題。 

【解決辦法】

  1. php支援把會話資料儲存到某臺memcache伺服器
  2. 也可以手工把session檔案存放的目錄改為nfs網路檔案系統,從而實現檔案的跨機器共享。 
  3. 還有一個簡單的辦法可以用於會話資訊不會頻繁變更的情況,在機器a設定使用者會話的時候,把會話資料post到機器b的一個cgi,機器b的cgi把會話資料存下來,這樣機器a和b都會有同一份session資料的拷貝。
  4. 除了上述提及的方法外,解決session共享問題還有這樣一種方式:(實質上並不是通過session的共享來解決的)這裡以nginx為例,將使用者請求分發到了不同機器上,那麼我們只需要固定,同一使用者請求分發到同一機器上進行處理,即這一次使用者來請求伺服器了,那麼下一次它再來的時候,同樣也請求也被分發到與上一次相同的伺服器。這樣就確保了同一使用者不會因為請求分發到不同機器上而獲取不到session資料的問題了。