如何在PHP中将会话变量从一个域传递到另一个域

如何在PHP中将会话变量从一个域传递到另一个域,php,cross-domain,session-variables,urlencode,decode,Php,Cross Domain,Session Variables,Urlencode,Decode,我遇到了一种情况,需要将$u会话变量从一个域传递到另一个域的iFrame页面。在过去的16天里,我尝试了各种各样的方法,但都无济于事。我认为唯一合乎逻辑的方法是在调用iFrame的url中编码变量,并在iFrame页面中解码它们。我不知道如何进行这一点,我正在寻找任何样本,协助等,我可以找到 谢谢你的建议 这是一个我正在尝试做的例子 例如: <!-- Note only using hidden as I didn't want to build the form at test phas

我遇到了一种情况,需要将$u会话变量从一个域传递到另一个域的iFrame页面。在过去的16天里,我尝试了各种各样的方法,但都无济于事。我认为唯一合乎逻辑的方法是在调用iFrame的url中编码变量,并在iFrame页面中解码它们。我不知道如何进行这一点,我正在寻找任何样本,协助等,我可以找到

谢谢你的建议

这是一个我正在尝试做的例子

例如:

<!-- Note only using hidden as I didn't want to build the form at test phase-->
<form name="test" method="post" action="iframe_test.php">
<input type="submit" name="Submit" />
<input type="hidden" name="fName" value="abc" />
<input type="hidden" name="lName" value="def" />
<input type="hidden" name="address1" value="ghi" />
<input type="hidden" name="address2" value="jkl" />
<input type="hidden" name="country" value="mno" />
<input type="hidden" name="postal_code" value="pqr" />
<input type="hidden" name="city" value="stu" />
<input type="hidden" name="retUrl" value="vwx">
<input type="hidden" name="decUrl" value="yz">
我得到的会话数组如下所示: 代码:

到目前为止一切都很好…打电话给iFrame

代码:


并将其转换为我正在寻找的编码url?此外,一旦完成,如何在新的域iFrame页面上将会话变量作为会话变量返回…

您可以使用函数获取一个关联数组并将其转换为查询字符串

注意:您发布的第二个数组不是会话数组的正确输出

在接收页面/域上,只需获取查询字符串,并将预期参数放入/清理到$\u会话数组中(或您需要对其执行的任何操作)


这比使用serialize/unserialize之类的方法更安全,因为只使用数组。

序列化sessiondata数组并将其作为参数发送,然后反序列化

使用和,然后在不损坏数据和(主要)维护其结构的情况下传递数据


这不是一个好的做法,因为任何了解它如何工作的人都可以注入任意数据,但如果这是您想要做的,它将工作。

为什么不将会话id发送到otehr域(并假设他们可以读取相同的会话存储基片)将其用作那里的会话id,例如

<?php
// catch remote session id, validate and reassociate
if (md5($_GET['exported_sessid'], $shared_secret) == $_GET['check_hash']) {
      // (basic CSRF check
      session_id($_GET['exported_sessid']);
}
session_start();
....

为什么您认为需要发送会话变量?为什么不使用其他方法呢?这些域是什么?你控制哪一个?他们共用同一台服务器吗?他问我怎么做,似乎有点绝望,我给出了我在这个问题上的意见,就这样不谈了。“这是否是一个好的练习取决于他自己。”“榴弹中校,我在回答如何做某事,然后给出为什么不应该做的警告和理由。我不会撒谎说我自己过去也没有用过类似的方法每个人都需要犯错误才能学习。同样值得注意的是,没有不好的方法,只有不好的实现。。哦,赫拉西代码,我在我的日子里写的,但它的工作完美无瑕。没有测试这一点-您可能需要在调用session\u start()之前将值强制输入到$\u COOKIE[session\u name()]中
Array
(
    [fName] => abc
    [lName] => def
    [address1] => ghi
    [address2] => jkl
    [country] => mno
    [postal_code] => pqr
    [city] => stu
    [retUrl] => vwx
    [decUrl] => yz
)
<body>
Some page stuff here

<div align="center"><span class="style1"><strong>This is the iFrame Page</strong></span>
</div>
<div align="center">
<iframe src="https://www.other_domain.org/iframe/reserve.php" width="500" height="350" frameBorder="0"></iframe>
</div>

</body>
$_SESSION['fName']['abc']; 
$_SESSION['lName']['def']; 
$_SESSION['address1']['ghi']; 
$_SESSION['address2']['jkl']; 
$_SESSION['country']['mno']; 
$_SESSION['postal_code']['pqr']; 
$_SESSION['city']['stu']; 
$_SESSION['retUrl']['vwx']; 
$_SESSION['decUrl']['yz']; 
<?php
// catch remote session id, validate and reassociate
if (md5($_GET['exported_sessid'], $shared_secret) == $_GET['check_hash']) {
      // (basic CSRF check
      session_id($_GET['exported_sessid']);
}
session_start();
....