【问题标题】:Share session on subdomains in php在 php 中的子域上共享会话
【发布时间】:2013-12-04 04:19:37
【问题描述】:

我在两个子域之间共享会话时遇到问题,我在这里和其他地方阅读了很多帖子。

我有 www.xx.com 和 sub.xx.com 并且我已经设置了

session_name("PHPSESSXX");
session_set_cookie_params(0, '/', '.xx.com');

两个域上的 session.save_path 相同。

我在两个域上都获得了一个名为 PHPSESSXX 的 cookie,它具有相同的值。

当我登录 www.xx.com 时,我会收到一个包含一些详细信息的会话,并且在我访问 sub.xx.com 之前它会一直保持这种状态。那么 sub.xx.com 上的会话是空的,如果我刷新 www.xx.com,那里的会话也消失了。所以它做了一些事情,但似乎每次我访问不同的子域时都会覆盖会话数据。

有什么想法吗? - 我可以调试一下吗?

顺便说一句:我在两个域上都使用 ssl。

干杯

【问题讨论】:

  • 您的代码似乎正确,您是在session_start 之前设置的吗?
  • 第一个明显的调试技巧是找到浏览器的开发工具并检查 cookie 值是否保持不变。如果没问题,您可能无意中删除了会话数据。
  • 我已经检查了每一个(我相信)假定的重复项,但没有找到答案。我在 session_start 之前设置它并且我没有删除任何会话值。反正不在我的 php 脚本中。

标签: php session subdomain


【解决方案1】:

PHP 会话 ID 保存在 Cookie 中。要使 cookie 在所有子域中可用,您需要将其分配给根域。然后所有子域都会从 cookie 中获取会话 id,PHP 可以使用传递的会话 id 找到会话。

事实证明,您只需将 session.cookie_domain 设置为 php.ini 文件中的根域

session.cookie_domain = ".example.com" 另请查看手册以了解用于设置 ini 条目的不同方法。

你的问题在这里得到解答

Sharing SESSION Variables Between Multiple Subdomains

【讨论】:

  • 这正是我所做的,如上所述。而且我尝试了不同的方法来设置 ini 设置。 cookie_domain 工作正常,但会话不能跨域工作。我已经阅读了顶部的主题,但这不起作用,以及您建议的那个……看来我只需要继续搜索……;o)
【解决方案2】:

我的解决方案是在.htaccess 中设置一个标志,如下所示:

php_flag "suhosin.session.cryptdocroot" 0

它现在可以完美运行;o)

问题是系统上安装了Suhosin,而ini变量

suhosin.session.cryptdocroot = On

以这样的方式加密会话文件,当不同的子域试图更改会话时,出于安全原因,它会删除所有内容。

我无法在 ini 文件中将变量设置为 Off 或 [nothing],但也许我没有找到正确的文件。

我也尝试在 PHP 中设置它,但没有任何运气。像这样:

ini_set('suhosin.session.cryptdocroot', 0)

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2011-04-14
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多