【问题标题】:Does page reload ever cause post?页面重新加载是否会导致帖子?
【发布时间】:2012-12-14 17:57:55
【问题描述】:

快速提问,我自己尝试过解决这个问题,但是当试图弄清楚页面为什么或如何重新加载以及做/不做它应该做的事情时,会话变量的使用可能会令人困惑。

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

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

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

我只是需要知道这里会发生什么,这样我才能正确诊断我的会话状态问题。

感谢您的帮助!

(另外,对不起,如果我把这个问题过于简单化了。我意识到它“可能”比一个简单的答案所能提供的更复杂)。

******更新********** 另外,我在 StackOverflow 上查找了这个问题的副本,但我什么也没看到,所以如果这是一个重复的问题,我深表歉意。

这里的两个答案都是很好的答案。我接受了也为我的问题提供了解决方案的答案,虽然 PRG 不是“唯一”的方法,但它似乎可能是最好的。这似乎也是处理客户端用户友好性的一种日益增长的方式,而且恕我直言,这似乎是一个很好的习惯。

感谢您向我展示这一点!

【问题讨论】:

    标签: c# html forms post webmatrix


    【解决方案1】:

    是的。如果页面是使用 POST 数据加载的,则会发生这种情况。为了防止这种情况,您需要实现POST/REDIRECT/GET pattern

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

    【讨论】:

    • 我有一个问题:如果您试图发布敏感信息(社会保险号等),使用 GET 会不会产生任何人都可以查看的查询字符串?
    • 这里有几个 ;-)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      处理此问题的一种方法是使用令牌。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        相关资源
        最近更新 更多