PHP Session和iFrame

时间:2017-01-30 06:23:28

标签: php session iframe cookies

我对PHP会话处理感到困惑。这是场景:

客户端浏览器访问server-a.domain-1.com,它将server-b.domain-2.com上页面的内容加载到iframe中。

客户端从server-a获取会话cookie;让我们说它的值是123.如果我在服务器-b上回显session_id(),它在iframe中显示不同的会话ID,比如说456,但是在客户端上没有这个cookie。当然,如果我直接加载server-b页面,我会得到它的cookie,所以有2个会话cookie,123和456.

我不能得到的就是这个。我删除了所有的cookie并加载了server-a的页面,所以现在我有了它的cookie(123)。在iframe中呈现的页面显示会话ID 456,但其cookie不在客户端上。现在,每次我在server-a上重新加载页面时,server-b显示相同的session_id,但客户端永远不会获取其cookie。

那么如果没有cookie,server-b如何知道这是相同的会话?

从我的阅读中我理解会话可以动态添加为url参数,如果cookie不可用但这需要在php.ini中设置session.use_trans_sid,而不是。地址栏中也没有证据证明这种情况正在发生。

我很欣赏任何有关这里实际情况的见解。

1 个答案:

答案 0 :(得分:0)

在默认配置中PHP将会话数据存储在硬盘驱动器上。如果要在两个不同的服务器上使用会话,则必须设置共享会话。例如,这可以使用memcache完成。

在您的设置中,服务器server-a.domain-1.com将会话存储在他的硬盘上。当您将会话ID发送到server-b.domain-2.com时,他会尝试从硬盘驱动器中读取会话。这将失败并创建一个新会话。或者在某些情况下,它会加载另一个不属于原始会话的会话。