6

科尔斯笔记版本:

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>

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

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

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

4

1 回答 1

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 哪些 html 标记用会话 ID 重写。在这里, iframe=src 已添加到默认集:

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

于 2009-04-30T02:50:59.570 回答