URLで変数を渡さずに、POSTをGETにリダイレクトするときに変数を渡すスレッドセーフな方法はありますか?
私が達成しようとしているのはこれです。ユーザーが画像をアップロードできるフォームを含むページがあります。そのフォームは、ブラウザによってPOSTとしてサーバーに送信されます。画像のアップロードが成功すると、ページはGETにリダイレクトされ、ユーザーがアップロードしたばかりの画像を表示します。2つのページ間で変数を渡すことを考えることができる唯一の安全な方法は、GETパラメーターを使用することです。
ImageUpload.php
$imageID = processImageUpload();
if($imageID){
redirect("/ImageDisplay.php?uploadedImageID=".$imageID)
}
ImageDisplay.php
$uploadedImageID = getRequestVariable('uploadedImageID');
if($uploadedImageID != FALSE){
//Display the image just uploaded with an 'image uploaded success!' message
}
//Display all the other images
これは世界で最悪の事態ではありませんが、変数をGETパラメーターとして含めるのは少し醜いです。また、リダイレクトされたページでユーザーが更新を押すと、「画像のアップロードが成功しました」と表示されるように、少し誤解を招く可能性があります。画像をアップロードしただけではありませんが、もう一度メッセージを送信してください。
POSTページからGETページに変数を渡すスレッドセーフな別の方法はありますか?
セッション変数またはCookie変数を使用することは、一度に2つの画像がアップロードされる可能性があり、競合状態が発生する可能性があるため、安全ではありません。
リダイレクトを使用して、リファラーヘッダーを読み取ることができると思いました。例:
- にリダイレクトするImageUpload.phpへのPOST
- GET ImageDisplay.php&uploadedImageID = 123
- GET ImageDisplay.phpここで、前のGETリクエストからリファラーを読み取ります。
ただし、リファラーは常にアップロードフォームを保持しているページであり、中間ステップの場合はそうではないようです。
GETパラメーターとして以外に、あるリクエストから別のリクエストに変数を渡す他の方法はありますか?