使用 Chrome 和 IE 在 iFrame 中丢失 PHP 会话


Losing PHP sessions in iFrame with Chrome & IE

问题:

我在将会话变量从父页面传递到 iFrame 页面和 AJAX 时遇到问题,在 Chrome 和 IE 中称为 PHP 文件。不过,它似乎可以在FF和Safari中使用。

环境:

我有Wordpress作为我的"门户"。我的一个Wordpress页面是"仪表板"。该仪表板针对 CRM Web 服务发出 AJAX 请求以呈现 JSON 数据。Wordpress,Dashboard文件和CRM都在同一个域中。"www.domain.com/wordpress"是Wordpress域,"www.domain.com/dashboard/dashboard.php"是通过iFrame包含在Wordpress页面上的仪表板文件,"www.domain.com/CRM/webservice.php"是我进行AJAX调用的Web服务文件。

方法:

用户使用 LDAP 登录 Wordpress。我从Wordpress获取用户名并将其转储到$_SESSION['WPUsername']变量中,作为Wordpress登录功能的扩展。然后,当我的仪表板在 iFrame 中加载时,它会通过 jQuery $.get() 向我的 CRM Web 服务文件发出请求。webservice.php接收请求,然后使用 $_SESSION['WPUsername'] 会话变量在内部查询相应的数据并返回响应。

问题:

火狐工作正常。IE和Chrome似乎认为$_SESSION['WPUsername']webservice.php要求时不存在。

我错过了什么?

我对我的PHP配置和网站进行了所有建议的更改。我将 php.ini 中的 cookie 路径设置为"/",并在 iFrame 中使用了完整的子域路径("www.domain.com/dashboard/dashboard.php")。它现在似乎工作正常。

另一方面,我刚刚使用 OpenAM 作为 IdP 和 SimpleSAMLphp 作为 SP 实现了 SSO。 不再需要会话 cookie 来管理身份验证,组件之间传递的所有数据现在都使用 Web 服务完成。