在跨域 iframe 中设置 PHP SESSION 变量时出现问题

sea*_*son 6 php iframe session-variables cross-domain

科尔斯笔记版本:

index.php?map_id=foo加载到 www.not-my-domain.com 上的 iframe。索引集SESSION['map_id']= foo. Flash 文件尝试SESSION['map_id']通过 Authenticate.php获取,但 Authenticate.php 没有为任何 SESSION变量设置值。

-- 仅首次加载,跨域问题。

详细:

我在设置时有一个索引: SESSION['map_id'] = foo

索引文件然后加载一个闪存文件。初始化时,flash 访问一个“Authenticate.php”文件,该文件回显SESSION['map_id']并通过 加载到 flash 中LoadVars。Flash 然后显示适当的数据。 此步骤不能以其他方式完成

这一切在我们的主站点上都运行良好。当我们尝试通过提供 iframe 嵌入代码来移植到其他站点时,问题就出现了:

<iframe src="http://www.mydomain.com/?map_id=foo&code=bar" ... ></iframe>
Run Code Online (Sandbox Code Playgroud)

在从另一个站点 (www.anotherdomain.com) 重新加载嵌入代码时,SESSION变量似乎已被破坏,因为 flash 只是说它们是空的。($map_id输出空白)

索引文件仍会正确回显$map_id为“foo”,只是“Authenticate.php”文件似乎无法访问SESSION变量。

我已确保session_start()存在于所有适当的文件中。

vam*_*min 6

PHP 会话 ID 默认通过 cookie 传递,但您不能跨域传输 cookie。尝试通过 url 传递会话 ID。

这是 php 文档中的相应页面

如果没有自动完成,有几种方法可以让 php 在 url 中传递会话 ID。

  1. 您可以在 url 中手动传递会话 ID(必须在其他 get 变量之前):

    <iframe src="http://www.mydomain.com/?&map_id=foo&code=bar">

  2. 您可以禁用 cookie,强制每个请求将会话 ID 自动添加到 url:

    ini_set("session.use_cookies","0");

  3. 您可以编辑 url_rewriter.tags 设置,它告诉 PHP 使用会话 ID 重写哪些 html 标签。在这里, iframe=src 已添加到默认设置中:

    ini_set("url_rewriter.tags", "a=href,area=href,frame=src,iframe=src,input=src,form=fakeentry");