0

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

我检查了所有标头,例如 no-cache 和 must-revalidate ,但仍然发生相同的情况。

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

我知道我的问题有一个完美的解决方案,因为许多 Web 应用程序都这样做。我想知道大公司是怎么做的。必须有一种标准的方式,它可以像魅力一样发挥作用。

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

4

2 回答 2

1

我想,只有当用户登录时才会发生这种情况,并且在登录后他点击注销。然后,当您在浏览器中按下返回按钮时,会发送带有 $_POST 他日志记录数据的表单,并且浏览器会询问您是否要再次发送该表单。我对吗?你是这个意思吗?

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

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

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

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

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

于 2013-10-18T12:00:16.137 回答
1

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

这应该是处理表单提交的一般方式,有效地抑制了重新发布表单数据。无法使用 GET 表单完成 - 但是很少需要受保护的 GET 表单......

于 2013-10-18T12:00:30.307 回答