不少時候一個完整的系統可能運行在多個服務器上,若是這多個服務器之間須要共享session的話,那麼php默認的files保存session的方式就無能爲力了。這時咱們能夠考慮使用memcache 來接管session的保存與讀取工做。 php
第一步:咱們須要在服務器上搭建必要的環境,node
php 、web server的安裝不是主題就很少說了,其餘還須要的是 memcached 服務端、php_memcache擴展mysql
下面安裝爲centos 下的示例(注:如下安裝命令跟服務器配置有關,不能保證通用性,請根據實際狀況進行調整)web
安裝 memcached sql
安裝php_memcache擴展數據庫
或者centos
注:擴展安裝完畢後須要重啓web server來使用擴展生效瀏覽器
第二步:啓動memcached服務進程服務器
第三步:檢查php擴展是否正確安裝cookie
一、命令行執行php -m 查詢結果中是否有memcache項
二、建立phpinfo()頁面,查詢session項下面的Registered save handlers值中是否有memcache項
第四步:在兩臺服務器上進行測試
測試代碼示例:
保存上面代碼(注意替換域名和IP),分別放在兩臺服務器的web目錄下,打開兩個瀏覽器標籤,前後訪問兩個地址,若是兩個頁面輸出的session_time後的時間戳和session_id是同樣的話就說明已經OK了。
第五步:修改現有代碼,切換php的session.save_handler
在全部須要共享session的入口文件中都增長如下代碼(須要加在session_start()函數以前)
或者也能夠直接到php.ini中修改上面三行的相應的取值,這樣就不須要改動已有的PHP代碼,根據實際狀況選擇方案。
第一行是指定session的保存方式
第二行是指定session_id生成的cookie域,也就是你想要共享session的cookie域,注意替換成本身的域名
第三行是session的保存路徑,這裏是使用tcp去鏈接memcached端口,注意替換成本身的提供memcache服務的服務器IP
OK,大功告成了。
注:因爲memcache協議是不須要權限驗證的,任何人均可以訪問memcache中存儲的數據,因此須要設置好防火牆規則,禁止未受權IP訪問,或者在啓動memcached進程時使用 -l 參數指定只監聽局域網IP。
固然,要實現多機session共享還有其餘不少方式,
如:
一、tokyo tyrant ,這個和memcache原理相同
二、session保存在數據庫中(須要本身定時清理數據庫中過時的session)
三、經過NFS文件共享的方式,多臺WEB服務器共享保存session文件的磁盤 http://imysql.cn/?q=node/202