之前介紹過了memcached安裝以及session in memcached後,接下來本篇介紹在主網域下跨子網域取得同樣的session資料。針對高流量的網站必須會有好幾台web server同時上線運作,先不論用什麼方式去將使用者導去哪台server,情況一定會是使用者不管連去那台server,session資料必須要共用,否則假設使用者在server-a登入後,結果導回網站是連到server-b後卻變成是未登入。
準備
1. 二台server以及二個子網域
2. 安裝好memcached
3. 將session存進meacached
4. 修改C:\Windows\System32\drivers\etc\host,將二個子網域分別直接指定各server
測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', "tcp://HOST:PORT"); ini_set('session.cookie_domain', '.shian.tw'); session_start(); echo 'session_id='.session_id().'<p/>'; $_host = substr($_SERVER['SERVER_NAME'],0,1); if($_host == 'a'){ echo 'host=a<hr/>'; $_SESSION['test_from_a'] = 'test_from_a'; echo $_SESSION['test_from_b']; } elseif($_host == 'b'){ echo 'host=b<hr/>'; $_SESSION['test_from_b'] = 'test_from_b'; echo $_SESSION['test_from_a']; } |
說明
以上測試結果如有在各別子網域下,讀取到對方的session值就表示達成共享session了。其實主要關鍵的設定是"ini_set('session.cookie_domain', '.shian.tw');" 這個參數,簡單說就是指定*.shian.tw下所儲存session_id的cookie,都會是同一個session_id,只要session_id一樣所以就可以取得該session_id的值,以上做的測試只是想要證明是否有達成我們想要的結果。
參考資料
- http://tw.php.net/manual/en/session.configuration.php#ini.session.cookie-domain
- 安裝memcached
- session in meacached