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


back button behaviour if previos page has conditional redirection commands

在我的PHP表单结构

第1页:has form

第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';

注意:下面的后退按钮是指浏览器的后退按钮(不是自定义链接)

如果我在成功提交表单后点击第3页的BACK按钮(页面顺序为第1页->第2页->第3页),我观察到浏览器(Chrome暂时)页面转到第1页。(所以按下后退按钮后,页面顺序是第3页->第1页)

我无法访问第3页->第2页->某些页面(我99.9%确信我的试验代码是正确和有效的)

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

我不明白的是

  • 我在第3页设置会话变量为'success'。
  • 我在第2页说,如果会话变量是"成功",然后去首页
  • 第2页是第3页的前一页

那么为什么我不能到达主页后点击后退按钮,而我在第3页?

当你提交表单到Page2,而Page2处理你的数据然后重定向到page1或page3;Page2使用标头重定向并中断Page2的加载,而您的浏览器继续加载page3。

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

现在我要问你的问题是:为什么你要"back"转到page2?

表单提交已经处理,处理文档和回击是糟糕的用户体验,因为如果用户提交好所以page2数据和用户page3,但想回到所述,用户将不得不回到所以page2,应该提示用户是否重新提交数据,大多数用户不知道如何应对,按"是",这将导致重复数据,或重定向用户与错误消息,所述不同所以page2逻辑。

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

这个故事的教训是不要让你的重定向过于复杂,KISS,只需提交表单并获得结果,不需要:设置会话变量,然后重定向,然后检查会话变量是否设置……

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

在这种情况下,它是有意义的,因为您的浏览器没有保存发布的数据。如果它能够注意到你发布的内容,它甚至应该要求"重新发布"数据。

无论如何,请给我们更多的信息,你如何处理这3页。你的"重定向"是如何构建的?