【问题标题】:PHP: Using session variables set in an iframe in multiple iframesPHP:在多个 iframe 中使用 iframe 中设置的会话变量
【发布时间】:2026-02-19 11:00:01
【问题描述】:

我使用一个名为 liferay 的内容管理系统,让您可以非常轻松地将 iframe 添加到页面。我有各种不同的 iframe,我想使用相同的 php 会话变量。如果主网页正在设置会话,这将不是问题。问题是会话是在一个 iframe 中创建的,而我想在另一个 iframe 中使用它们?

通常会话 ID 可以通过 url 传递,但这不是我设置它的方式。没有这样的导航。 iframe 根据第一个 iframe 中设置的会话变量显示来自数据库的内容,但它们没有链接。

有人可以帮我吗?我不确定 iframe 还能如何共享会话变量。

谢谢,

琼斯

【问题讨论】:

    标签: php session iframe session-variables


    【解决方案1】:

    如果域保持不变,第一个 iframe 将创建会话,第二个 iframe 将在 session_start() 之后拾取它

    你真的不需要在 URL 中传递这个或任何东西的会话。写入会话数据时的第一个 iframe 将锁定会话数据。但是有一个问题,对于 iframe,您永远无法确定第一个 iframe 确实首先加载,可能是网络拥塞的原因,或者第二个 iframe 可能首先加载。所以也许是为了解决这个延迟加载第二个 iframe 的问题。

    【讨论】:

    • 感谢您的回复。当我尝试通过 iframe 设置会话变量时,我无法在任何其他 iframe 页面(之后加载)中访问它们。但是当我在新窗口中打开 iframe 设置变量时,我可以从 evry iframe 访问这些变量。这就像它在 iframe 中的事实一样,如果将变量保持私有,但在新窗口中打开它会使它们公开。希望这是有道理的。我确保我使用 session_start();
    • 为什么不在主页中设置 session_id 而在 iframe 中设置子集
    • @Jonesy .. 你能从你从第一个和第二个 iframe 调用的 PHP 文件中发布一些代码吗?
    【解决方案2】:

    正如 Sabeen 所说,如果您使用基于 cookie 的会话跟踪(这是 PHP 默认使用的,如果用户代理支持 cookie),会话将被自动拾取。如果在 iframe 中加载的页面来自不同的子域,您可能会遇到麻烦。在这种情况下,您必须使用 session.cookie_domain 配置变量。

    ini_set("session.cookie_domain", ".domain.com");

    【讨论】:

    • 谢谢,他们刚刚是本地的。 liferay 运行在 localhost:8080 和 php 文件 localhost/clientportal
    • 在 iframe 页面中尝试 echo session_id(); 以确保两者中的会话 ID 相同。
    • 感谢您的提示。设置会话的 iframe 网页的会话 ID 与任何其他 iframe 页面不同。你认为这是为什么?
    • 快速谷歌搜索后,我认为问题与您的主机名(本地主机)有关。您是否可以通过编辑主机文件来使用别名,例如 example.com?
    • 这些是我的建议。 1)尝试使用虚拟主机或别名。 2)如果1不起作用,请尝试将session.cookie_domain设置为127.0.0.1。 3) 如果 2 不起作用,则安装 LiveHTTPHeaders Firefox 插件以找出未保存会话 cookie 的原因。