我有一个允许用户登录的Web应用程序。当用户单击注销按钮时,我取消设置所有POST变量并清除包含会话的所有cookie。但是,当我按下后退按钮时,所有POST变量仍然存在,最后一个登录页面仍然存在,并在用户cookie中生成一个新会话。
我已经检查过所有标题,例如no-cache和must-revalidate,但仍然会发生同样的情况。
POST数据仍然存在的事实表明该页面是从浏览器历史记录中加载的。
我知道我的问题有一个完美的解决方案,因为许多网络应用程序都这样做。我想知道大公司是如何做到的。必须有一种标准的方式,就像魅力一样。
PS:使用Javascript不是一个选项。也许使用JS,我可以做一些事情来防止加载,但我不想这样做,因为许多用户可能已经禁用了JS。我也不想禁用浏览器的后退按钮和刷新功能,这是某些应用程序的功能。
答案 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表格......