2011-06-28 7 views
1

私は(PHPの)Webアプリケーションに取り組んでいます、私はいくつかのparameter.IにURLをリダイレクトする必要がどここれは、対応するURLにリダイレクトされますが、私のデータはで表示されているこのPHPでURLをリダイレクトする最良の方法は?

header("Location:http://www.xyz.com?code=2345"); 

のようなコードを書かれていますブラウザでは、データをブラウザに表示したくないのですが、データを非表示にするにはどうすればいいですか?これは安全なリダイレクト方法ですか?リダイレクトの最良の方法は何ですか?

+0

リダイレクトする(出力を書き留めてリダイレクトするのは意味がありません)場合は、出力を書き込まないでください。 –

+0

彼は彼のURLで見える変数を意味します。 – TJHeuvel

+0

CakePHPを使用していますか?そして、あなたが心配しているデータは、URLの 'code = 2345'ですか?この秘密のデータですか? – deceze

答えて

0

現在のリクエストに(307でリダイレクトして)送信されたフィールドをにリダイレクトすることは可能ですが、人工的に作成するのは難しく、ユーザーがJavaScriptを有効にしているかどうかによって異なります。私はこの関数を使用しますが、ユーザーがjavascriptを無効にしている場合は、その関数に依存しないでください。

<?php 

function createHiddenFields($value, $name = NULL) 
{ 
    $output = ""; 
    if(is_array($value)) { 
     foreach($value as $key => $value) { 
      $output .= self::createHiddenFields($value, is_null($name) ? $key : $name."[$key]"); 
     } 
    } else { 
     $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />", 
      htmlspecialchars(stripslashes($name)), 
      htmlspecialchars(stripslashes($value)) 
     ); 
    } 
    return $output; 
} 

function redirectNowWithPost($url, array $post_array = NULL) 
{ 
    if(is_null($post_array)) { //we want to forward our $_POST fields 
     header("Location: $url", TRUE, 307); 
    } elseif(! $post_array) { //we don't have any fields to forward 
     header("Location: $url", TRUE); 
    } else { //we have some to forward let's fake a custom post w/ javascript 
     ?> 
<form action="<?php echo htmlspecialchars($url); ?>" method="post"> 
<script type="text/javascript"> 
//this is a hack so that the submit function doesn't get overridden by a field called "submit" 
document.forms[0].___submit___ = document.forms[0].submit; 
</script> 
<?php print createHiddenFields($post_array); ?> 
</form> 
<script type="text/javascript"> 
document.forms[0].___submit___(); 
</script> 
     <?php 
    } 
    exit(); 
} 

?> 
0

あなたはそれはあなたが同じホストにリダイレクトする場合は、あなたがセッションにデータを格納し、クッキーを経由してセッションIDを送信することができ

+1

POSTロケーションのリダイレクトはできません。 – cweiske

+0

CURLを使用して、ポストデータをリクエストに添付することができます。 – TJHeuvel

+0

私は決してPOST Locationリダイレクトを言った。もし彼がURLにデータを表示したくないのであれば、それを行う方法はPOST – mikeq

0

を表示したくない場合はGET、その後、POSTをない使用する必要があります。

また、データを保存してセッションIDを送信することもできます。ターゲットシステムはセッションIDを読み取り、セッションIDに基づいて元のサーバーに元のデータを要求します。

0

どのようにリダイレクトする前にセッションでの変数の設定について:

session_start(); 
$_SESSION['code'] = 2345; 
header("Location: http://www.xyz.com"); 
+0

これも可能ですか? – Phliplip

+0

sry、私は急いでいた。私はget :)の代わりにセッションを書くことを意味しました)。アップデートを参照してください。 –

+1

ありがとうございます。別のドメインにリダイレクトしています。他のドメインのセッションデータを取得するにはどうすればよいですか? – pushpa

1

使用CakePHPの作り付けのredirect functionリダイレクトのためではなく、変数がまだURLに表示されます。

0

URLにGETパラメータを使用する代わりに、一部のデータをsessionに設定するのはなぜですか?通常通りリダイレクトできますが、データはユーザーに表示されず、サーバー側に保存されます。

関連する問題