redis中的PHP会话忽略session.cookie_domain配置

时间:2014-10-22 13:18:31

标签: php session session-cookies setcookie

我有几个共享相同会话的子域。我曾经有一台服务器,我有以下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?

2 个答案:

答案 0 :(得分:1)

根据我从朋友那里得到的提示,我将相同的配置移到了/etc/httpd/conf.d/php.conf,由于某种未知的原因,它开始工作了!

如果有人在这里理解它有助于我听到它的原因,我希望这会帮助其他人解决同样的问题。

答案 1 :(得分:0)

设置会话名称为Redis前缀已解决我的问题:

session_name('PHPREDIS_SESSION');