PHPでPOSTでリダイレクトする方法を解説!
PHPでリクエストをPOSTでリダイレクトする方法についてご紹介します。リダイレクト先にリクエストのデーターを引き継ぐには、明示的にリダイレクトの目的を示すだけ!
PHPでPOSTでリダイレクトする方法
PHPでリダイレクトをする方法はheader
関数を用いる方法と、下記でご紹介したheader
関数以外でリダイレクトする方法があります。
上記の様なPHPのheader
関数以外で行うリダイレクトや、header
関数を用いた302リダイレクト方法では、リダイレクトはGET形式で行われます。
PHPでリクエストをPOST形式でリダイレクトするには、リクエストの内容を引き継ぎながらリダイレクトする必要があります。
リクエストの内容を引き継ぎながらリダイレクトをするにはHTTPレスポンスステータスコード307を用います。
それでは、header
関数を使って307リダイレクトをする方法について解説して行きたいと思います。
PHPで307リダイレクトをする方法
307リダイレクトをするには、header
関数の第三引数へ「307」をセットします。
PHPのheader関数で307リダイレクト
header("Location: リダイレクト先URL", true, 307);
次に、下記のフローでリクエストがPOSTでリダイレクトできているか、サンプルコードを使って確認してみましょう。
① form.php:redirect.phpへPOSTリクエスト
② redirect.php:print.phpへ①の内容を引き継ぎながらリダイレクト
① form.php
<form action="redirect.php" method="post">
POSTデータ
<input type="text" name="test" value="POSTデータサンプル">
<button type="submit">リダイレクト</button>
</form>
② redirect.php
header("Location: print.php", true, 307);
リダイレクト先でリクエストされた方法を確認するには、PHPの$_SERVER["REQUEST_METHOD"]
を出力すると見る事ができます。
サンプルコードのリダイレクトボタンを押下すると、POSTでリダイレクトされている事が確認できます。
次に、リダイレクト時のパラメータについても確認してみましょう。
PHPでリダイレクトするとパラメータはどうなる?
PHPのheader
関数を使ってリダイレクトすると、パラメータはどうなるのでしょうか?
HTTPレスポンスステータスコードにおいて、一時的なリダイレクトには302と307があります。
リダイレクト後のパラメータを実際にサンプルコードで確認してみましょう。まずは302リダイレクトを確認してみます。
リダイレクト方法と、受け取ったPOSTデータを出力してみます。
PHPのPOSTデータは$_POST
変数に配列格納されていますのでprint_r
で見てみましょう。
POSTでリクエストしたのに、リダイレクト先ではGETになっています。当然POSTデータは取得できていません。
次は307で試してみます。
307リダイレクトの場合、POSTでリクエストされ、POSTデータの値を渡す事ができている事がわかります。
このように、HTTPレスポンスステータスコードを使って明示的にリダイレクトの目的を指定する事により、リダイレクト先へ渡されるデータが変わってきます。
セキュリティの観点から考えると「大切なPOSTデータを目的もはっきりしない状態でリダイレクト先へは渡せない」という事ですね。