页面重新加载是不是会导致帖子?

Posted

技术标签:

【中文标题】页面重新加载是不是会导致帖子?【英文标题】: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.

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

感谢您的帮助!

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

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

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

感谢您向我展示这一点!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于页面重新加载是不是会导致帖子?的主要内容,如果未能解决你的问题,请参考以下文章

我如何获得一个页面来从数据库(如facebook)中重新加载所有用户的帖子

设置隐藏的下拉选择值会导致 iOS 11 Safari 中的页面重新加载

如何在不重新加载页面的情况下制作多个帖子(html,mysql)

GWT:刷新页面会导致整个 Web 应用程序重新启动。我应该在哪里保存状态?

是啥导致网页重新加载?

如何检查页面重新加载是不是完成