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

时间:2009-04-30 02:30:35

标签: php iframe cross-domain session-variables

Coles Notes版本:

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

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

详细:

我设置的地方有一个索引:SESSION['map_id'] = foo

然后索引文件加载一个flash文件。初始化后,闪存访问“Authenticate.php”文件,该文件回显SESSION['map_id']并通过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()出现在所有相应的文件中。

1 个答案:

答案 0 :(得分:4)

默认情况下,PHP会话ID通过Cookie传递,但您无法跨域传输Cookie。尝试通过网址传递会话ID。

Here is the appropriate page in the php documentation

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

  1. 您可以在网址中手动传递会话ID(必须先于其他获取变量):

    &lt; iframe src =“http://www.mydomain.com/?&map_id=foo&code=bar”&gt;

  2. 您可以停用Cookie,强制每个请求都自动将会话ID添加到网址:

    的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”);