shared session in memcached

之前介紹過了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的值,以上做的測試只是想要證明是否有達成我們想要的結果。

參考資料

Related Posts with Thumbnails

相關文章

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>