在Firefox中按Ctrl + r刷新页面和我的PHP代码

jus*_*joe 2 html php firefox

我已经创建了一个表单(所以它是PHP和HTML混合代码).它有能力发送'$ _POST'.当我点击它时,它完美地发送和显示输入.

但是当我点击Firefox中的Ctrl+ R来重新刷新页面时会发生一些事情.我得到了这个confim对话框:" 要显示此页面,Firefox必须发送重复执行之前执行的任何操作(例如搜索或订单确认)的信息 "

我的问题

  1. 它是什么,(这个确认对话框?)
  2. 我必须对我的代码做什么才能抑制这个对话框?

Bru*_*eis 6

您可能已经创建了一个包含a的HTML页面<form>.该表单用于将数据发送到HTTP服务器(即托管您站点的Web服务器).

HTTP协议定义了用于将数据发送到服务器以及从服务器检索数据的不同请求类型.最常用的是GETPOST.如果你想成为一个非常糟糕的PHP程序员,你必须了解所有这些,不幸的是(或者幸运的是,如果你在黑客方面)很常见.

您的问题是Firefox在发送POST请求后已到达您正在讨论的页面.如果您重新加载页面,它必须以POST的形式再次发送相同的数据.由于关于POST请求应该用于什么的约定(通常用于修改数据库上的数据),浏览器询问用户他是否确定他想要做什么.

绕过这个主要有两种选择:

  1. 将表单方法更改为GET; 要么
  2. POST后使用重定向.

要使用第一种方法,只需method="get"在表单标记中添加一个参数:

<form action="senddata.php" method="get"> ... </form>
Run Code Online (Sandbox Code Playgroud)

要使用第二种方法,只需在POST请求后使用类似的方法重定向用户

header("Location: blahblahblah")
Run Code Online (Sandbox Code Playgroud)

最常用的模式是POST-Redirect,也就是我告诉你的第二种方法.使用GET更改数据库上的数据有很多安全隐患(如果您对此感兴趣,并且您应该像每个PHP程序员那样阅读有关XSRF的内容).

  • 非常完整和详细的答案.确实如此完整,我对于没有提及HTTP 303状态代码(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4)的适当性感到惊讶POST重定向模式:"此方法主要用于允许输出POST激活的脚本以将用户代理重定向到选定的资源." (3认同)