如果上一页具有条件重定向命令,则返回按钮行为

时间:2014-08-20 13:49:37

标签: php client-side back url-redirection

在我的PHP表单结构中

第1页:有表格

第2页:执行条件重定向(第1页或第3页)

第3页:将表格记录到DB中,告知访客成功操作并感谢访客

示例简化代码

第1页

html form (action is POST to page 2)

第2页

if ( session variable value is 'success' )
{ redirect to homepage;
die; }

if form is not correctly filled redirect to page 1
if form is correctly filled redirect to page 3

第3页

insert form into MySQL database;
echo 'thanks visitor, your comments has been added';
set session variable to 'success';

注意:下方的BACK按钮表示浏览器的后退按钮(不是自定义链接)

如果我在成功提交表单(页面顺序第1页 - >第2页 - >第3页)后按第3页上的“返回”按钮,我发现浏览器(暂时是Chrome)页面转到第1页。点击后退按钮页面顺序是第3页 - >第1页)

我无法实现第3页 - >第2页 - >一些页面(我99.9%确定我的试验代码是正确的,并且有效用于此目的)

所以我问在这种情况下BACK按钮的行为是什么?为什么我的PHP代码没有被服务器读取并被浏览器应用(我的意思是第2页的PHP代码。因为订单是第2页 - >第3页所以通过回击,我通常希望读取第2页的代码再次)

我完全无法理解的是

  • 我将会话变量设置为'成功'在第3页。
  • 我在第2页说,如果会话变量是“成功”。然后去 主页
  • 第2页是第3页的上一页

那么为什么我在第3页上点击按钮后无法到达主页?

2 个答案:

答案 0 :(得分:1)

当您将表单提交给第2页,并且Page2处理您的数据,然后重定向到page1或page3; Page2使用标题重定向并中断第2页的加载,而浏览器继续加载第3页。

中断导致page2从未加载过,因此浏览器不会将其放入您的历史记录中。这是服务器端重定向的标准协议。事实上,互联网上的大多数网站都依赖此协议来静默地将用户重定向到正确的页面,否则您将在浏览器的历史记录中获得一堆无用的重定向页面。

现在我的问题是:你为什么要"回来"去第2页?

表单提交已经处理完毕,并且重新处理是糟糕的用户体验,因为如果用户向page2提交了良好的数据并且用户获得了page3,但是想要返回到page1,则用户必须去回到第2页,它应该提示用户是否重新提交数据,大多数用户不知道如何对此作出反应并按下"是"这将导致重复数据,或者将用户重定向到带有错误消息的page1,具体取决于第2页中的逻辑。

如果您希望能够重新提交表单数据而不再输入所有内容,则实际应将page3移至page2,并仅在表单提交失败时重定向回page1。然后重新提交,只需刷新页面以获得重新提交的提示,然后单击"是"。

故事的寓意是不要过分复杂你的重定向,KISS,只需提交表单并获得结果,不需要:设置会话变量,然后重定向,然后检查是否设置了会话变量等。

答案 1 :(得分:0)

取决于您的代码,这3个页面是否构建为1页? 换句话说,您是否将数据发布到同一页面,然后根据发布的数据显示其他表单第2或第3部分?

在这种情况下,它是有道理的,因为您的浏览器没有保留发布的数据。 它甚至应该要求“重新发布”数据,如果它能够注意到你发布的东西。

无论如何,请向我们提供有关如何处理这3页的更多信息。 您的“重定向”如何构建?