一、session知識
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在鏈接服務器時,會由服務器生成一個惟一的SessionID,用該SessionID 爲標識符來存取服務器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數據。
服務器也經過URL重寫的方式來傳遞SessionID的值,所以不是徹底依賴Cookie。若是客戶端Cookie禁用,則服務器能夠自動經過重寫URL的方式來保存Session的值,而且這個過程對程序員透明。
在後端應用服務器上php.ini 裏幾個session相關值的,能夠進行簡單設置
session.use_cookies = 1 #表示 服務端和客戶端交互session是經過cookie的方式 默認值
session.name = LXSYM #默認值是PHPSESSID 能夠自行定義。好比LXSYM
session.cache_limiter = nocache #此設置確保對每一個請求,在可能提供緩存的版本前,先請求發送到最初的服務器。php
針對session數據推薦使用共享存儲,實現方法不少。好比存於多個memcached中,具體會寫博文說明,敬請關注~程序員
二、實現haproxy與客戶端session一致的方法有:
2.1 用戶IP 識別
haroxy 將用戶IP通過hash計算後 指定到固定的真實服務器上。
配置指令 balance source (如: balance uri len 100)後端
2.2 cookie 識別
haproxy 將WEB服務端發送給客戶端的cookie中插入(或添加前綴)haproxy定義的後端的服務器COOKIE ID。
配置指令例舉 cookie SESSION_COOKIE insert indirect nocache
能夠使用firebug能夠觀察到用戶的請求頭的cookie信息緩存
2.3 session 識別
haproxy 將後端服務器產生的session和後端服務器標識存在haproxy中的一張表裏。客戶端請求時先查詢這張表。
配置指令例舉 appsession LXSYM len 64 timeout 5h request-learn
注意LXSYM這個值替換成 你的php.ini 裏session.name的值。服務器
如有問題能夠留言~cookie