postでリダイレクト

2007/05/10 | その他

時々だがこういうお話を聞くことがある(PHP-MLネタ)。

(1) ブラウザからプログラムAにリクエストを出して、Aでしかるべき処理をし、
(2) その後ブラウザからプログラムBへ、プログラムAで処理した内容を持ってpostしたい。

これは「できない」のだ。こんなことができてしまったら大変だ。悪意あるサーバに対して誤ってリクエストを送っただけで、例えば「別のブログサイトへスパム投稿させる」といったこともできてしまう。
上記のような処理を思いついたなら、即座にその考えを捨て、別の処理方法を探るべきだ。

別解として、いくつかあると思う。ぱっと思いついただけでも、
(1) Aで処理した内容をセッションに保存してBへリダイレクトさせ、そして処理。
(2) Aで処理して、必要であればBをインクルードして追加処理をし、結果を表示。
こんなことでできるはず。

しかし最近面白い記事を見かけた。いったんAにpostした内容を、Bへpostで再送信させる方法だ。「Do you PHP」の下岡さんのブログでの記述

HTTPレスポンスで「一時的にこっちのURLをつかってね」返す方法だ。やり方はheader関数を使って、

header(‘Location: http://www.example.com/B.php’, true, 307);

とステータス307を返してやるというもの。なんでもFireFoxではダイアログが表示されるが、IEでは何も表示されず(何事もなかったように)うまくpostしてくれるそうだ。いろいろなステータスコードがあるものだ。

しかしやっぱりスマートな処理方法ではないと思う。
ロジックを見直すほうがきっとスマートなプログラムになるはず・・・。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net