如何禁用浏览器按下后退按钮重新生成表单数据

时间:2013-10-18 11:48:28

标签: php cookies browser-cache browser-history cache-control

我有一个允许用户登录的Web应用程序。当用户单击注销按钮时,我取消设置所有POST变量并清除包含会话的所有cookie。但是,当我按下后退按钮时,所有POST变量仍然存在,最后一个登录页面仍然存在,并在用户cookie中生成一个新会话。

我已经检查过所有标题,例如no-cache和must-revalidate,但仍然会发生同样的情况。

POST数据仍然存在的事实表明该页面是从浏览器历史记录中加载的。

我知道我的问题有一个完美的解决方案,因为许多网络应用程序都这样做。我想知道大公司是如何做到的。必须有一种标准的方式,就像魅力一样。

PS:使用Javascript不是一个选项。也许使用JS,我可以做一些事情来防止加载,但我不想这样做,因为许多用户可能已经禁用了JS。我也不想禁用浏览器的后退按钮和刷新功能,这是某些应用程序的功能。

2 个答案:

答案 0 :(得分:1)

我想,只有在用户登录时才会发生这种情况,登录后他点击退出。然后当您在浏览器中按下后退按钮时,会发送包含其日志记录的$ _POST数据的表单,浏览器会询问您是否要再次发送该表单。我对吗?你是说这个吗?

如果是,则使用此解决方案以避免再次发送表单(单击后退按钮或按下F5(刷新)时):

当您使用登录数据处理表单时,请重定向到同一页面或主页(它在您身上)。使用

header("HTTP/1.1 302 Found");
header('Location: '.$url_to_redirect);

然后,当他点击后退按钮或刷新页面时,它不会再次发送登录数据,因此不会重新登录。

如果还有其他原因,请发表评论,我会解释更多。

答案 1 :(得分:1)

1)使用POST进行表单数据传输 2)在服务器端处理POSTed数据后,向客户端发送302 Moved响应,强制它离开POST并将其定向到GET登录页面。

这应该是处理表单提交的一般方法,有效地抑制了rePOSTing表单数据。不能用GET表格来完成 - 但是很少需要有保护的GET表格......