代币和重新提交

时间:2012-11-26 23:27:24

标签: php

我在这里看了好几个问题,似乎无法找到我想要的东西。

我有一个程序,它创建一个隐藏的令牌字段,以检查用户是否实际从该页面发送了它,这很好但现在我发现每个页面创建一个令牌,它使最后一页有效。我没有选择每个会话创建一个令牌,我有一个没有替换的标题303,例如:

header("Location: " . $_SERVER['PHP_SELF'], false, 303);

当这段代码运行时,我看到标题与刷新有效我没有得到'重新提交数据?'我在标题后回显了数据,似乎它没有回应它。

我喜欢每页与回发数据很好地工作,但仅适用于请求的最后一页,对于每个会话w / 303,重新发布/令牌可以工作,但它不会回显标题之后的数据。或者是否有其他方法允许令牌和禁用重新提交数据,并能够回显我需要用户看到的数据?

如果您需要一些示例代码,我很乐意编辑这篇文章。

2 个答案:

答案 0 :(得分:0)

我假设您将令牌存储在会话中 - 因此解决此问题的最简单方法是不存储单个令牌,而是存储令牌的列表,每个都有一个到期日。

因此,每当您使用令牌创建页面时,都会将其附加到列表中。每当您验证令牌时,您都会循环列表,清除过期的令牌,验证所有有效令牌。

答案 1 :(得分:0)

目前尚不清楚为什么会在浏览器中看到数据 。 (它实际上可能是打印,只是没有使用。通过telnet调试,数据包捕获或其他一些捕获标题内容的方法,如果这很重要的话。)

...我认为您的问题来自期望重新发布或以其他方式查看POST内容。它不会是:303重定向(按规范)后跟GET。一旦浏览器看到303重定向和Location标头,它将跟随新URL并忽略响应的内容。