8

$_SESSION 変数をあるドメインから別のドメインの 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_test.php にアクセスして、次のことを行います: PHP コード: function StripSpecChar($val) { return (preg_replace('/[^a-zA-Z0-9" "-.@:/_]/ ','', $val)); }

foreach ($_POST as $key => $val) { 
$_SESSION[$key] = StripSpecChar($val);   
} 

そして、次のようなセッション配列を取得します: コード:

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

これまでのところ、まだすべて順調です....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>

では、どのように摂取すればよいのでしょうか...

$_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']; 

探しているエンコードされた URL に変換しますか? さらにそれが完了したら、セッション変数をその新しいドメイン iFrame ページのセッション変数として戻す方法...

4

4 に答える 4

2

sessiondata配列をシリアル化し、パラメーターとして送信してから、逆シリアル化し ますhttp://www.php.net/manual/en/function.serialize.php

于 2010-04-26T16:31:47.517 に答える
1

serialize()を使用してからbase64_encode()を使用して、データを破損せずに(ほとんどの場合)その構造を維持せずにデータを渡します。

それがどのように機能するかを理解している人なら誰でも任意のデータを挿入できるため、これは良い習慣ではありませんが、それがあなたのやりたいことであれば、それは機能します。

于 2010-04-26T16:33:00.243 に答える
1

セッションIDを他のドメインに送信しないのはなぜですか(そして、同じセッションストレージ基板を読み取ることができると仮定して)、そこでセッション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();
....

C.

于 2010-04-26T16:47:27.457 に答える
0

連想配列を取得し、関数http_build_queryを使用してクエリ文字列に変換できます

注:投稿した2番目の配列は、セッション配列の正しい出力ではありません。

受信ページ/ドメインで、クエリ文字列を取得し、期待されるパラメータを$ _SESSION配列(またはそれを使用して行う必要があるもの)に配置/サニタイズします。

これは、配列のみが使用されているため、シリアライズ/アンシリアライズのようなものを使用するよりも安全です。

于 2010-04-26T16:31:09.217 に答える