1

我正在使用 Post Get Redirect 方法使用 asp.net webforms 提交表单。这是一个非常简单的设置:

Step 1) Post form on Page1.aspx
Step 2) Process form and redirect using Response.Redirect to Page2.aspx
Step 3) Page2.aspx redirects using Response.Redirect to Page3.aspx

如果您在 Page3.aspx 上并点击后退按钮,我认为它应该将您带回 Page2.aspx 并将您重定向回 Page3.aspx。这将减少您返回 Page1.aspx 并再次提交数据的机会。

相反,当我点击后退按钮时,我被直接带回 Page1.aspx。我也尝试过使用 303 重定向,但这也不起作用。

这里会发生什么?

4

1 回答 1

1

您所看到的行为是正确的做法。

各种浏览器,为了更好地支持某些网站(如谷歌)的操作方式,不会在后台历史记录中保留立即重定向的页面。

考虑一下:

  1. 你搜索 google.com
  2. 你点击一个链接
  3. 该链接实际上将您带回 google.coms 服务器,然后立即将您转发到实际页面。

  4. 您认为这不是正确的链接,然后单击后退按钮。

此时,大多数浏览器会将您带回到第 2 步中标识的页面。这是数百万网民通常希望和预期的行为。

回到第 3 步只是被转发到第 4 步,这会惹恼一些人。正如某些版本的 IE 最近所做的那样,直到该行为被修补。

关键是,您所看到的行为正是网络其余部分的工作方式。如果您真的想要,您应该研究一些其他机制来改变这一点。

更新


@NinjaBomb:不知何故,我错过了您的后续问题,因此以下内容可能没有多大用处。

答案是,不是在 c# 代码中进行重定向,而是在 Page2 中嵌入一些 javascript,当页面加载完成时进行重定向。然后浏览器“存储”对第 2 页的引用。当他们从 3 单击返回按钮时,它将返回到 2,然后重定向到 3。

当然,用户可以简单地按两次后退按钮...中断 2 的重定向并让他们转到 1。我能想到的唯一其他方法是让页面 1 在加载时测试一些会话或 cookie 值以查看如果他们已经被发送。如果是这样,那么第 1 页应该进行重定向而不是显示自己。

于 2012-05-21T22:18:58.817 回答