当用户按下后退按钮时禁用重新发布(数据来自 URL 参数)


Disable re-posting when user presses back button (data comes from URL parameters)

我得到了必须通过URL参数插入数据库的东西,不幸的是我目前无法更改它。所以它是这样的:send.php?id=2&messag=hello 等。

发送数据后,我使用 PHP 的位置将用户发送到另一个页面。如果用户按下后退按钮,数据当然会再次发送,因为 url 仍然包含相同的参数。我也无法进行自我编辑,因为数据来自 GET url 参数。

不幸的是,我也无法访问用户用于提交信息、创建唯一时间戳或类似内容的表单。在这种情况下,避免重复提交的最佳方法是什么?

如果您无法将 GET 更改为 POST,强烈建议您在请求导致某些内容更改时将其更改为 POST,我建议您检查后端的重复条目。

您决定什么构成重复项:所有参数都相同吗?某些关键参数是否相同? 还是在过去 5 分钟内从同一用户发送了相同的查询?

另一种解决方案是使用"随机数"。生成页面时,发送一个随机数 - 一个只能使用一次的唯一令牌。当他们单击"返回"时,它将尝试发送相同的随机数,您可以检查该随机数是否已用完。

我认为除了通过在$_SESSION$_COOKIE中存储某些内容来检查提交之外,您不能做更多的事情。

例如,您可以放置一个时间戳并检查它是否允许在 10 分钟的延时中重新发送。

事实是,它的编程很糟糕。插入请求必须由 POST .这样,浏览器就会单独提醒您。重定向将起作用。