-1

我在这里查看了几个问题,似乎找不到我要找的东西。

我有一个程序,它创建一个隐藏的令牌字段来检查用户是否真的从那个页面发送它,这很好,但现在我发现它创建一个令牌的每个页面都使最后一页有效。我没有选择为每个会话创建一个令牌,并且我有一个没有替换的标头 303,例如:

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

当此代码运行时,我看到标题可以刷新我没有得到“重新提交数据?” 并且我在标头之后回显了数据,并且似乎没有回显它。

我喜欢每页与回发数据很好地配合使用,但仅适用于请求的最后一页和带 303 的每个会话,重新发布/令牌有效,但它不会在标题后回显数据。还是有其他方法可以允许令牌并禁用重新提交数据并能够回显我需要用户查看的数据?

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

4

2 回答 2

0

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

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

于 2012-11-26T23:32:28.360 回答
0

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

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

于 2012-11-26T23:48:18.653 回答