在跨域iframe中设置PHP SESSION变量时出现问题
-
03-07-2019 - |
题
Coles Notes版本:
index.php?map_id=foo
已加载到www.not-my-domain.com上的iframe中。索引集SESSION['map_id']
= foo。 Flash文件尝试通过Authenticate.php获取SESSION
,但Authenticate.php没有为任何 SESSION['map_id'] = foo
varaibles设置值。
- 仅限首次加载,跨域问题。
详细:
我设置了索引:LoadVars
然后索引文件加载一个flash文件。初始化时,闪存访问'Authenticate.php'文件,该文件回显出$map_id
并通过session_start()
加载到闪存中。然后,Flash会显示相应的数据。
此步骤无法以其他方式完成
这一切在我们的主站点上运行得很好。当我们尝试通过提供iframe嵌入代码移植到其他网站时出现问题:
<iframe src="http://www.mydomain.com/?map_id=foo&code=bar" ... ></iframe>
在来自其他网站(www.anotherdomain.com)的新嵌入代码中,似乎<=>变量已被破坏,因为flash只是说它们是空的。 (<=>输出空白)
索引文件仍然会正确地回显<=>为'foo',它似乎只是'Authenticate.php'文件无法访问<=>变量。
我确保<=>出现在所有适当的文件中。
解决方案
默认情况下,PHP会话ID通过Cookie传递,但您无法跨域传输Cookie。尝试通过网址传递会话ID。
如果没有自动完成,有几种方法可以让php在网址中传递会话ID。
-
您可以在网址中手动传递会话ID(必须先于其他获取变量):
<!> lt; iframe src = <!> quot; http://www.mydomain.com/?<!> amp; map_id = foo <!> amp; code = bar <!> quot; <! > GT;
-
您可以停用Cookie,强制每个请求都自动将会话ID添加到网址:
的ini_set(QUOT <!>; session.use_cookies QUOT <!>;和quot <!> 0 QUOT <!>);
-
您可以编辑url_rewriter.tags设置,该设置告诉PHP使用会话ID重写哪些html标记。这里,iframe = src已添加到默认集:
ini_set(<!> quot; url_rewriter.tags <!> quot;,<!> quot; a = href,area = href,frame = src,iframe = src,input = src,form = fakeentry <!> QUOT);
醇>