我有几个共享相同会话的子域。我曾经有一台服务器,我有以下php.ini
以允许为所有子域保留相同的cookie:
session.cookie_domain = ".mydomain.com"
使用此配置使服务器返回以下set-cookie:
Set-Cookie: PHPSESSID=aumsloucmjspvs1mbvromqq1b5; path=/; domain=.mydomain.com
现在我的服务器很少,我想使用Redis
来共享所有服务器之间的会话。我设置了服务器并将以下内容添加到php.ini
:
session.save_handler = redis
session.save_path = tcp://192.1.1.1:6379?auth=noauth
会话在服务器上成功保存,但返回的set-cookie不正确:
Set-Cookie: PHPSESSID=cec074e4d961ff6c800c21b7466c7d5a; path=/
因此,在下一次调用客户端到另一个子域时,它不会发送他从第一个子域获得的cookie。
我在phpinfo()
的会话中使用PHP 5.3.18,redis 2.2.5:
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain .example.com .example.com
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 43200 43200
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/session /var/lib/php/session
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
我知道如何强制服务器发送正确的set-cookie?
答案 0 :(得分:1)
根据我从朋友那里得到的提示,我将相同的配置移到了/etc/httpd/conf.d/php.conf
,由于某种未知的原因,它开始工作了!
如果有人在这里理解它有助于我听到它的原因,我希望这会帮助其他人解决同样的问题。
答案 1 :(得分:0)
设置会话名称为Redis前缀已解决我的问题:
session_name('PHPREDIS_SESSION');