我有一个名为'act‘的隐藏参数,它应该传递一个值'load',在按submit按钮时保存。
问题是在按下submit按钮后按下F5 (刷新)按钮时,因为url已经包含'&act=save‘,所以F5上的prssing实际上再次传递’F5‘值(它再次执行保存操作,甚至我没有按submit按钮)。
问题是如何防止在按reffresh按钮时发送“&act=save”?
谢谢
谢谢大家,但提交按钮是一个“保存”按钮-意味着我希望给用户留下额外保存的能力,所以不要离开页面。因此,我认为会话可能无助于区分第二次保存和第一次刷新。
发布于 2011-10-09 07:54:42
这里的核心问题是,当您使用POST时,您正在使用GET。HTTP规范说
特别是,公约规定,GET和HEAD方法除了检索之外,不应具有采取其他行动的意义。
如果使用POST,浏览器至少会警告您重新提交表单。
为了避免这种情况,请使用后重定向-获取模式。
发布于 2011-10-10 16:29:01
一个比已经提供的更复杂的解决方案是每次生成带有表单的页面时创建一个操作令牌。此操作令牌存储在服务器上,并发送给客户端。当客户端提交表单时,它包含操作令牌。当服务器收到表单提交时,它会根据存储在该用户会话中的令牌检查操作令牌。如果它匹配一个未过期的令牌,那么它允许表单处理继续并在会话中过期该令牌。
这可以防止表单提交不止一次,也有一个副作用,即如果实现得当,它可以帮助减轻跨站点请求伪造。
https://stackoverflow.com/questions/7702097
复制相似问题