Home | Mirror | Search

10. Session/Cookie

為什麼我要在這裡提Session和Cookie,這也大型站點必須要處理問題。

10.1. Session

在集群環境中與單伺服器是不一樣的,集群組成可分為調度伺服器和節點,節點數量不定,單個節點安裝有web伺服器,用戶每次訪問網站調度伺服器隨機分配一個節點給該用戶, 舉一個例子:用戶在網站上看新聞,點擊第一個連接被分配到node 1上去,當他看完這條新聞並單擊下一條時,可能被分配到其它節點上,這裡剛纔建立的session在node 1上, 它就會因失去session而必須重新登錄。

所以我們要同步所有節點上的Session, 另外如果能用Cookie代替Session的地方儘量使用Cookie。

10.2. Session 共享

解決方案:

  1. 不用Session,使用Cookie取而代之

  2. 共享Session,放到資料庫中,放到Memcache中

PHP Session很有解決方案:

查看PHP手冊 Session Extensions 章節,重寫Session邏輯。

共享Session用Memcache,在php.ini中配置即可

session.save_handler = memcache
session.save_path = tcp://127.0.0.1:10001
			

10.3. Cookie

Cookie 我這裡提到cookie是可以實現“單點登錄”功能。

一個網站可能不指一組集群系統,如news.example.org, bbs.example.org, blog.example.org 要實現在一處登錄即可在其它站點上同時也處于登錄狀態,就要用到Cookie來實現。

10.4. Cookie 安全

Cookie存儲在用戶端,Cookie數據極易偽造。下面提供幾個方案。

  • 在Cookie數據上加干擾詞

  • 在反向代理上做手腳

  • 負載均衡設備都提供Cookie保護功能

10.5. cookie-free domains

comments powered by Disqus