作者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
1F:推 Jerr:推 12/14 18:34
2F:推 maplecat:推~~~ 12/15 02:38
3F:→ pilisword:memcache的串接埠不是这样搞的拜请google大神吧 12/17 16:19
4F:→ pilisword:另外如果只是做共用session 应该一台1024就很好用了 12/17 16:20
5F:推 cspy:shmop应该可以达到共变数的存取 不过在LINUX下面比较适合 12/18 16:24
6F:→ athelok:to cspy: 因为我的环境是不同主机 google了一下shmop好像 12/21 10:42
7F:→ athelok:不行? 12/21 10:42