页面重新加载是否会导致发布?

快速的问题,我试图找出自己,但使用会话variables可能会混淆,当试图找出为什么或如何重新加载页面,做/不做它应该做的事情。

在任何(非脚本)情况下,页面是否会重新加载(使用JavaScript,f5,ctrl + f5,浏览器重新加载button等)导致表单转发?

(这与如下示例代码中使用C#代码中的IfPost分支有关):

if(IsPost) { //stuff that only executes if the previous request was a post. } 

我只是需要知道在这里期待什么,所以我可以正确诊断我的会话状态问题。

感谢您的帮助!

(另外,如果我简单地回答了这个问题,对不起,我意识到它可能比简单的答案更复杂)。

另外,我在StackOverflow上查找这个问题的副本,但是我没有看到任何东西,所以如果这是一个重复的问题,我很抱歉。

这两个答案都是很好的答案。 我接受了也解决了我的问题的答案,虽然PRG不是“唯一”的方法,但似乎可能是最好的。 这似乎也是一个越来越多的方式来处理客户端的用户友好,而imho似乎是一个很好的习惯。

谢谢你给我看!

是。 如果使用POST数据加载页面,则会发生。 为了防止这个,你需要实现POST/REDIRECT/GET模式 。

Post / Redirect / Get(PRG)是一种Web开发devise模式,可防止一些重复的表单提交,为用户代理(用户)创build更直观的界面。 PRG以可预测的方式支持书签和刷新button,不会创build重复的表单提交。

是。 如果某人手动刷新浏览器,则会询问他们是否要再次发送表单数据。 这会导致代码被执行。

处理这个问题的方法是使用令牌。

  1. 发送一个随机的string和发布数据
  2. 将此随机string存储在某处
  3. 当您检查发布数据时,请确保存储的string与发布请求中的string相同。
  4. 如果为true,则处理请求。
  5. 生成一个新的令牌

如果有人刷新并重新发送发布数据,则发布请求中的令牌将与您单独存储的令牌不同,因为您在步骤5中生成了新的令牌