php Redis如何使多个域名共用一个session_id?

<p>解决办法:</p><p>ini_set(&#39;session.cookie_domain&#39;, &#39;.domain.com&#39;);</p><p>PHP文档:</p><p>http://php.net/manual/zh/function.sessio...</p><p>http://php.net/manual/zh/session.configu...</p><p>=========================================================================</p><p>现在需要用redis存储session,由于有多个域名,</p><p>例如:</p><p>a.domain.com,domain.com,www.domain.com</p><p>其中一个登陆了就需要另外的也是登陆状态,</p><p>就像淘宝一样,你登陆了taobao.com在tmall.com天猫中也是登陆的。session_id是一样的。</p><p>这个用redis来要配置什么?</p><p>domain.com</p><p>a.domain.com</p><p>www.domain.com</p><p>都存在一个共同的域domain.com,只要你把PHPSESSID这个cookie的域设为.domain.com,那这三个域都可以访问这个PHPSESSID的cookie,也就能读取Redis里存储的会话数据.</p><p>http://php.net/manual/zh/function.session-set-cookie-params.php</p><p>而 taobao.com 和 tmall.com 是两个完全不同的域,比如可以这样实现跨域:</p><p>用隐藏的图片请求实现跨域登录(比如登录taobao后,访问tmall发现也登录了):</p><p>taobao.com添加隐藏的图片链接访问tmall.com进行登录,生成tmall.com的Cookie(Firebug可以看到Cookies下既有taobao.com,也有tmall.com的Cookie):</p><p>&lt;div style=&quot;display:none;&quot;&gt;&lt;img src=&quot;tmall.com/login.php?token=xxx&quot; /&gt;&lt;/div&gt;</p><p>其中token是一个经过加密的用户身份令牌,tmall.com拿到解密后登录对应的用户,从而生成域为tmall.com的cookie.</p><p>我觉得楼主的问题是没搞清楚回话保持机制,建议先研究下。</p><p>@eechen 的回答我补充一下:</p><p>三个网站均用sessionsetcookie_params把session对应的cookie域设置为&quot;.domain.com&quot;</p><p>参看</p><p>http://php.net/manual/zh/function.session-set-cookie-params.php</p><p>简单点说,把生成、保存、读取session_id的逻辑从php中独立出来就可以了,跟redis的半毛钱关系在于,以session_id为key在redis里保存用户的信息。。</p>
RangeTime:0.007742s
RangeMem:206.09 KB
返回顶部 留言