2009-04-30 40 views
3

Coles的Notes版本:问题设定跨域iframe中PHP SESSION变量

index.php?map_id=foo被装入的iframe上www.not-my-domain.com。索引集SESSION['map_id'] = foo。 Flash文件试图让SESSION['map_id']通Authenticate.php,但Authenticate.php没有对任何SESSION varaibles设定值。

- 只有首次加载的跨域问题。

详细:

我有一个指标,而在这里我设置:SESSION['map_id'] = foo

索引文件,然后加载Flash文件。初始化时,闪存会访问'Authenticate.php'文件,该文件回显出SESSION['map_id'],并通过LoadVars加载到闪存中。 Flash然后显示适当的数据。 这一步不能以另一种方式完成

这一切在我们的主网站上运行得很好。问题来当我们通过提供iframe嵌入代码尝试端口出到其他网站:从其他网站(www.anotherdomain.com)

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

上的嵌入代码的一个新的负载,似乎SESSION变量闪光只是说它们是空的。 ($map_id输出一个空格)

索引文件仍然会正确回显$map_id作为'foo',它似乎'Authenticate.php'文件无法访问SESSION变量。

我已确保session_start()存在于所有相应的文件。

回答

4

默认情况下,PHP会话id通过cookie传递,但不能跨域传输cookie。尝试通过网址传递会话ID。

Here is the appropriate page in the php documentation

有几个方法可以让PHP来传递会话ID的URL,如果它没有被自动完成。

  1. 您可以手动传递会话ID的URL(必须出现在其他GET变量):

    < IFRAME SRC =“http://www.mydomain.com/ & MAP_ID = FOO &代码=栏 “>

  2. 可以禁用饼干,迫使每个请求具有自动添加到URL中的会话ID:

    的ini_set(” session.use_cookies”, “0”);

  3. 您可以编辑url_rewriter.tags设置,它告诉PHP html标签与会话ID重写它。在这里,IFRAME SRC =已添加到默认设置:

    的ini_set(“url_rewriter。标签“,”a = href,area = href,frame = src,iframe = src,input = src,form = fakeentry“);

+0

所以,因为会话ID没有通过第一次直通通过cookies,会话变量不知道他们属于哪个会话? 如果我通过URL传递会话ID,然后我可以告诉会话它的ID? – 2009-04-30 18:24:36