session共享那點事


2、如何實現session的共享?
首先咱們應該明白,爲何要實現共享,若是你的網站是存放在一個機器上,那麼是不存在這個問題的,由於會話數據就在這臺機器,可是若是你使用了負載均衡把請求分發到不一樣的機器呢?這個時候會話id在客戶端是沒有問題的,可是若是用戶的兩次請求到了兩臺不一樣的機器,而它的session數據可能存在其中一臺機器,這個時候就會出現取不到session數據的狀況,因而session的共享就成了一個問題。

1.各類web框架早已考慮到這個問題,好比asp.net,是支持經過配置文件修改session的存儲介質爲sql server的,全部機器的會話數據都從同一個數據庫讀,就不會存在不一致的問題;

2.以cookie加密的方式保存在客戶端.優勢是減輕服務器端的壓力,缺點是受到cookie的大小限制,可能佔用必定帶寬,由於每次請求會在頭部附帶必定大小的cookie信息,另外這種方式在用戶禁止使用cookie的狀況下無效.

3.服務器間同步。定時同步各個服務器的session信息,此方法可能有必定延時,用戶體驗也不是很好。

4.php支持把會話數據存儲到某臺memcache服務器,你也能夠手工把session文件存放的目錄改成nfs網絡文件系統,從而實現文件的跨機器共享。
還有一個簡單的辦法能夠用於會話信息不會頻繁變動的狀況,在機器a設置用戶會話的時候,把會話數據post到機器b的一個cgi,機器b的cgi把會話數據存下來,這樣機器a和b都會有同一份session數據的拷貝。
php

相關文章
相關標籤/搜索