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

Dav*_*ave 8 php decode session-variables urlencode cross-domain

我遇到过一种情况,我需要将$ _SESSION变量从一个域传递到另一个域的iFrame页面.我花了最后16天尝试各种方法无济于事.我认为唯一合乎逻辑的方法是在url中编码调用iFrame的变量并在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">
Run Code Online (Sandbox Code Playgroud)

所以从我在这里打了iframe_test.php并执行以下操作:PHP代码:功能StripSpecChar($ VAL){回报(的preg_replace('/ [^ A-ZA-Z0-9" " - @:/ _]/','',$ val)); }

foreach ($_POST as $key => $val) { 
$_SESSION[$key] = StripSpecChar($val);   
} 
Run Code Online (Sandbox Code Playgroud)

我得到一个如下所示的会话数组:代码:

Array
(
    [fName] => abc
    [lName] => def
    [address1] => ghi
    [address2] => jkl
    [country] => mno
    [postal_code] => pqr
    [city] => stu
    [retUrl] => vwx
    [decUrl] => yz
)
Run Code Online (Sandbox Code Playgroud)

到目前为止仍然很好......打电话给iFrame

码:

<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>
Run Code Online (Sandbox Code Playgroud)

那我该怎么做......

$_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']; 
Run Code Online (Sandbox Code Playgroud)

并将其转换为我正在寻找的编码网址?进一步完成后,如何将会话变量恢复为新域iFrame页面上的会话变量...

web*_*ave 0

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

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

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

这比使用序列化/反序列化之类的方法更安全,因为仅使用数组。