我得到了必须通过 URL 参数插入数据库的东西,不幸的是我目前无法更改。所以它是这样的:send.php?id=2&messag=hello 等。
发送数据后,我使用 PHP 的位置将用户发送到另一个页面。如果用户按下返回按钮,数据当然会再次发送,因为 url 仍然包含相同的参数。我也无法进行自我重定向,因为数据来自 GET url 参数。
不幸的是,我也无权访问用户用来提交信息、创建唯一时间戳或类似内容的表单。在这种情况下,避免重复提交的最佳方法是什么?
我得到了必须通过 URL 参数插入数据库的东西,不幸的是我目前无法更改。所以它是这样的:send.php?id=2&messag=hello 等。
发送数据后,我使用 PHP 的位置将用户发送到另一个页面。如果用户按下返回按钮,数据当然会再次发送,因为 url 仍然包含相同的参数。我也无法进行自我重定向,因为数据来自 GET url 参数。
不幸的是,我也无权访问用户用来提交信息、创建唯一时间戳或类似内容的表单。在这种情况下,避免重复提交的最佳方法是什么?
如果您无法将 GET 更改为 POST 强烈建议每当请求导致某些内容发生更改时,我建议您检查后端的重复条目。
由您决定什么构成重复:所有参数都相同吗?某些关键参数是否相同?还是同一用户在过去 5 分钟内发送了相同的查询?
另一种解决方案是使用"nonce"。生成页面时,发送一个随机数——一个只能使用一次的唯一令牌。当他们点击“返回”时,它会尝试发送相同的随机数,你可以检查它已经用完了。
我认为您只能通过在$_SESSION
or中存储一些内容来检查提交内容$_COOKIE
。
例如,您可以放置一个时间戳并检查是否不允许在 10 分钟的时间间隔内重新发送。
事实是它的程序很糟糕。插入请求必须由POST
. 这样,浏览器就会单独提醒您。并且重定向将起作用。