【问题标题】:PHP sessions in redis ignores session.cookie_domain configurationredis 中的 PHP 会话忽略 session.cookie_domain 配置
【发布时间】: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


【解决方案1】:

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

如果这里有人理解它提供帮助的原因,我很乐意听到它,我希望这能帮助其他有同样问题的人。

【讨论】:

    【解决方案2】:

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

    session_name('PHPREDIS_SESSION');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 2013-01-17
      • 2017-05-20
      • 2015-11-21
      相关资源
      最近更新 更多