【发布时间】:2014-10-22 13:18:30
【问题描述】:
我有几个共享相同会话的子域。我曾经有一个服务器,并且我有以下 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 吗?
【问题讨论】:
-
我不明白更改会话保存路径将如何更改用于会话 cookie 的域。这是奇怪的行为。您是否尝试过在运行时使用
session_set_cookie_params()设置 cookie 路径以查看是否能够获得不同的行为? -
是的,我试过但没有帮助:(
-
ini_get('session.cookie_domain')在运行时得到什么值? -
在将 php.ini 中的配置设置为空并使用
ini_set('session.cookie_domain', ".mydomain.com");时,我得到了新值,但请求响应仍然有 set-cookie 域错误.. 对我来说它看起来像一个错误在 PHP 中... -
为什么不显示相关的 PHP 代码?
标签: php session session-cookies setcookie