作者athelok (連米)
看板PHP
標題Re: [請益] 使用memcache跨網域共享session的問題
時間Tue Dec 14 18:02:12 2010
跟各位報告一下我single sign on機制的處理方式
先前有大大建議我使用openID去做
但是由於公司內部網路設定的關係 沒辦法使用openID提供的API
只能回頭朝memcache的方向思考
公司共有四台網頁伺服器 四個網域 假設分別為
A:192.168.0.10 www.s1.com centOS 5.2
B:192.168.0.20 www.s2.com win2003
C:192.168.0.30 www.s3.com win2003
D:192.168.0.40 www.s4.com win2008
之前遇到的問題是跨一級網域時cookie值沒辦法傳遞
解決的方法是
1.先將四台伺服器各自灌好memcache
由於google上許多win32版本的memcache連結都已損毀
這裡提供我找到的可用連結
http://code.jellycan.com/memcached/
linux版本可參考
http://crazytoon.com/2008/01/20/memcached-how-do-you-install-memcached-centos-64-bit-linux-redhat-fedora/
這邊有傻瓜教學 我是linux白癡 照著這個站安裝也安裝得很愉快
2.將四台伺服器掛上memcache的extension
http://stackoverflow.com/questions/1511045/php-memcache-dll-for-php-5-3
這裡有win32版本的memcache.dll 我就不贅述php windows怎麼掛extension了...
3.將四台伺服器的session save path串連起來
這裡我遇到了些問題 卡了不少時間
google跟我說我可以將四台伺服器php.ini裡的session.save.path指定為
session.save_path="tcp://192.168.30.40:11211?persistent=1&weight=1&timeout=1&retry_interval=15,tcp://192.168.30.10:11211,tcp://192.168.30.20:11211,tcp://192.168.30.30"
但測試很久都連不起來 接著我嘗試將所有伺服器存到某台windows 2008主機
但linux那台就是連不到 無法共享session
最後我將所有伺服器的session存到linux那台 終於成功了
不知道是不是因為linux那台的memcache版本較新的緣故
希望有高手可以指點一下 我還盼望著將四台串聯做分散式系統 而不是只拿那台linux當主伺服器
4.主機設定的部分到這邊大致上OK 剩下一些防火牆的設定我就不說了
接下來是PHP的部分 我在single sign on的頁面讓使用者登入後
分別將session_id傳到其他三個站台的某個頁面 然後其他三個站台的session_start()頁面code如下:
if(isset($_GET['session_id'])) session_id($_GET['session_id']);
session_start();
這樣這三個站台在抓取session的時候都會回到主伺服器去抓取該session id的session list
以上報告 第一次使用memcache share session 有錯之處請各位指點
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.70.181
推 Jerr:推 12/14 18:34
推 maplecat:推~~~ 12/15 02:38
→ pilisword:memcache的串接埠不是這樣搞的拜請google大神吧 12/17 16:19
→ pilisword:另外如果只是做共用session 應該一台1024就很好用了 12/17 16:20
推 cspy:shmop應該可以達到共變數的存取 不過在LINUX下面比較適合 12/18 16:24
→ athelok:to cspy: 因為我的環境是不同主機 google了一下shmop好像 12/21 10:42
→ athelok:不行? 12/21 10:42