【问题标题】:Share session between domains on the same server在同一服务器上的域之间共享会话
【发布时间】:2014-04-16 20:53:50
【问题描述】:

我有一个带有两个域的服务器。我使用相同的 SESSION ID(假设您在两台服务器上手动更改“PHPSESSID”的 cookie 值,或者在 session_start 之前使用 session_id(...))。 两个域使用的session文件是一样的,我在磁盘上验证过了。

发生的情况是,当我更改域时会话被清除。我的意思是清除了两个域并且没有向会话写入任何内容。

请注意,几周前这在同一台服务器上有效,并且没有任何变化(至少我们没有手动更改/升级任何东西)

我用来调试的脚本是这些,在每台服务器上都是相同的:

SET 会话:

<?
session_id(PUT_HERE_THE_SAME_SESSION_ID);
session_start();
$_SESSION['KEY'] = 'VALUE';
?>

检查会话:

<?
session_start();
echo "SESSION ID: ".session_id()."<br>\n";
print_r($_SESSION);
?>

神奇的行为:
A 上的 SET 会话
在 A 上检查会话,一切正常
在 A 上刷新、等待或其他什么,然后检查,确定
检查 B 上的会话 -> EMPTY
再次检查 A -> EMPTY!!!!!

如果你交换 A 和 B,同样的行为。

感谢任何好的建议。
我不想用其他方法来做这件事,我需要了解发生了什么。

【问题讨论】:

  • 据我所知,不能在不同的“域”之间共享会话。这是一个安全问题。
  • 你是怎么知道的?有文件吗?我让它工作了!
  • 据我所知,会话存储在文件中,并且有一个巨大的独特文件夹。数据是序列化的,但没有为每个网站使用不同的密钥加密。
  • 你“让”它工作了;好的。所以现在不行了? (想知道为什么我收到了赞成票)
  • 我验证了两个域的会话文件是相同的,因此只有在 PHP 内部有一种机制将数据关联到单个域而不是另一个域时,它才能受到保护。有这方面的通知吗?

标签: php security session cookies cross-domain


【解决方案1】:

这是可能的,但被 suhosin 阻止了,在默认配置中,使用文档根目录作为密钥来加密会话数据。 因此,不同域的会话不能以这种方式共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 2013-04-21
    • 2015-06-27
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多