看板 PHP 關於我們 聯絡資訊
跟各位報告一下我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