PHP Post/Redirect/Get在Google Chrome中失效

3

我尝试在PHP中实现POST/REDIRECT/GET设计模式,在Safari上可以正常工作,但当我重定向到完全相同的页面时,Google Chrome(Mac版)不能正常工作。如果稍微变化一下URL(例如添加一个末尾斜杠),就可以正常工作。

这里是一个完全可用的示例:

<?php
if(TRUE === isset($_POST['submit'])) {
    header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], true, 303);
    exit();
}?>
<html><head></head><body>
<form action="" method="post"><input type="submit" name="submit" value="submit" /></form>
</body></html>

当我进入页面,点击提交按钮并刷新页面时,会弹出对话框询问我是否确认重新提交表单数据。我的所有搜索结果都表明上述代码是实现POST/REDIRECT/GET的正确方式,并且应该可以正常工作(在Safari中确实如此),但在Mac的Chrome浏览器中却无法正常工作。
2个回答

3

非常感谢。那肯定就是了。我很高兴知道这是浏览器的问题,而不是我的代码的问题。 - user2155589

-1

刷新你提交的页面会弹出那个弹窗,因为浏览器想知道是否应该重新发送将你带到该页面的数据。这将发生在所有表单中。你说它在Chrome中不起作用。你有错误吗?它只是没有重定向吗?

此外,使用锚标签直接链接到新页面或使用迂回方式更有意义,例如:

<a href="http://<?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>?act=forward">Forward</a>

并检查$_GET ["act"]是否等于“forward”,而不是检查表单是否已被发送。


我正在尝试使用Post/Redirect/Get设计模式(维基百科)来防止在刷新页面时出现双重提交问题。我发布的代码非常简单,但演示了这个问题。 - user2155589

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接