2013-03-11 54 views
3

我尝试在PHP中实现POST/REDIRECT/GET设计模式,并且在重定向到完全相同的页面时,它适用于Safari,但不适用于Google Chrome(适用于Mac)。如果我稍微改变网址(例如添加尾部斜线),它可以正常工作。PHP发布/重定向/使用Google Chrome失败

这里是一个全功能的例子:

<?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。

回答

-1

刷新您发布的页面会为您提供该弹出框,因为浏览器想知道它是否应该重新发送将您带到该页面的数据。这将以各种形式发生。你说它不适用于Chrome。你有错误吗?它只是不重定向?

此外,它会更有意义使用锚标记有人直接链接到一个新的页面,或者用一种迂回的方式,如:

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

,并检查$ _GET [ “行为”]等于“前进”,而不是检查表单是否已发送。

+0

我想使用邮政/重定向/获取设计模式([百科](https://en.wikipedia.org/wiki/Post/Redirect/Get)),以防止在刷新页面时出现双重提交问题。我发布的代码是极简单的,但证明了这个问题。 – user2155589 2013-03-11 06:30:03