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()
出现在所有相应的文件中。
答案 0 :(得分:4)
默认情况下,PHP会话ID通过Cookie传递,但您无法跨域传输Cookie。尝试通过网址传递会话ID。
Here is the appropriate page in the php documentation
如果没有自动完成,有几种方法可以让php在网址中传递会话ID。
您可以在网址中手动传递会话ID(必须先于其他获取变量):
&lt; iframe src =“http://www.mydomain.com/?&map_id=foo&code=bar”&gt;
您可以停用Cookie,强制每个请求都自动将会话ID添加到网址:
的ini_set( “session.use_cookies”, “0”);
您可以编辑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”);