在将 POST 重定向到 GET 而不传递 URL 中的变量时,是否有一种线程安全的方式来传递变量?
我想要达到的就是这个。我有一个页面,其中包含一个允许用户上传图像的表单。该表单由浏览器作为 POST 发送到我的服务器。如果图片上传成功,页面将被重定向到一个 GET,我想在其中显示用户刚刚上传的图片。我能想到的在两个页面之间传递变量的唯一安全方法是通过 GET 参数。
图片上传.php
$imageID = processImageUpload();
if($imageID){
redirect("/ImageDisplay.php?uploadedImageID=".$imageID)
}
图像显示.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 变量是不安全的,因为可能同时上传两个图像,因此可能存在竞争条件。
我以为我可以使用重定向,然后阅读引荐来源标头,例如:
- POST 到重定向到的 ImageUpload.php
- GET ImageDisplay.php&uploadedImageID=123 重定向到
- GET ImageDisplay.php,我将从之前的 GET 请求中读取引荐来源网址。
然而,推荐人似乎始终是保存上传表单的页面,而不是任何中间步骤。
除了作为 GET 参数之外,还有其他方法可以将变量从一个请求传递到另一个请求吗?