Heim  >  Artikel  >  Backend-Entwicklung  >  phpredis - php Redis如何使多个域名共用一个session_id?

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

WBOY
WBOYOriginal
2016-06-06 20:29:041377Durchsuche

解决办法:

<code>ini_set('session.cookie_domain', '.domain.com');</code>

PHP文档:
http://php.net/manual/zh/function.sessio...

http://php.net/manual/zh/session.configu...

=========================================================================
现在需要用redis存储session,由于有多个域名,
例如:
a.domain.com,domain.com,www.domain.com

其中一个登陆了就需要另外的也是登陆状态,

就像淘宝一样,你登陆了taobao.com在tmall.com天猫中也是登陆的。session_id是一样的。
这个用redis来要配置什么?

回复内容:

解决办法:

<code>ini_set('session.cookie_domain', '.domain.com');</code>

PHP文档:
http://php.net/manual/zh/function.sessio...

http://php.net/manual/zh/session.configu...

=========================================================================
现在需要用redis存储session,由于有多个域名,
例如:
a.domain.com,domain.com,www.domain.com

其中一个登陆了就需要另外的也是登陆状态,

就像淘宝一样,你登陆了taobao.com在tmall.com天猫中也是登陆的。session_id是一样的。
这个用redis来要配置什么?

domain.com
a.domain.com
www.domain.com
都存在一个共同的域domain.com,只要你把PHPSESSID这个cookie的域设为.domain.com,那这三个域都可以访问这个PHPSESSID的cookie,也就能读取Redis里存储的会话数据.
http://php.net/manual/zh/function.session-set-cookie-params.php

而 taobao.com 和 tmall.com 是两个完全不同的域,比如可以这样实现跨域:
用隐藏的图片请求实现跨域登录(比如登录taobao后,访问tmall发现也登录了):
taobao.com添加隐藏的图片链接访问tmall.com进行登录,生成tmall.com的Cookie(Firebug可以看到Cookies下既有taobao.com,也有tmall.com的Cookie):

<code><div style="display:none;"><img  src="tmall.com/login.php?token=xxx" alt="phpredis - php Redis如何使多个域名共用一个session_id?" ></div>
</code>

其中token是一个经过加密的用户身份令牌,tmall.com拿到解密后登录对应的用户,从而生成域为tmall.com的cookie.

简单点说,把生成、保存、读取session_id的逻辑从php中独立出来就可以了,跟redis的半毛钱关系在于,以session_id为key在redis里保存用户的信息。。

我觉得楼主的问题是没搞清楚回话保持机制,建议先研究下。

@eechen 的回答我补充一下:
三个网站均用sessionsetcookie_params把session对应的cookie域设置为".domain.com"

参看
http://php.net/manual/zh/function.session-set-cookie-params.php

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:typecho 不支持PHP7Nächster Artikel:网站被人攻击?