1、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 #此設定確定對每個請求,在可能提供緩存的版本前,先請求發送到最初的伺服器。
針對session資料推薦使用共享存儲,實作方法很多。比如存于多個memcached中,具體會寫博文說明,敬請關注~
2、實作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的值。
若有問題可以留言~