【发布时间】: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