【发布时间】:2012-05-21 14:44:50
【问题描述】:
以下形式会导致 IE9 上出现空的 $_POST 变量。
<form id='login' action='login.php' method='POST' accept-charset='UTF-8'>
<input type='text' name="username" id='username' />
<input type='password' name='password' id='password' />
<input type="text" name="store" />
<input type='submit' name='Submit' value='Submit' />
</form>
该表单在 Firefox 和 Chrome 上完美运行。所有变量都出现在$_POST 变量中,没有问题。
然而,在 IE9 上,表单已正确提交,但 $_POST 是空数组。即,在 login.php 中:
print_r($_POST);
打印空数组。我试图弄清楚 IE9 可能有什么不同,导致它的行为与 Firefox 和 Chrome 不同,但我无法弄清楚。
我发现提到 Apache 下的一些模块会导致人们出现问题,但我运行的是 IIS7,而不是 Apache,所以不是这样。 Ruby 论坛上有人提到在注册表中将 DisableNTLMPreAuth 设置为 1,但这也没有解决。
感谢任何帮助。
【问题讨论】:
-
你试过输出phpinfo()吗?看看是否有任何请求变量正在填充会很有趣。例如,$_REQUEST
-
在 IE 上打开 developer-comsole(按 F12)并切换到网络选项卡。现在提交您的表单并查看显示的请求:是那里提到的后值(这意味着您的问题是服务器端的)还是它们丢失了(问题是客户端的)。
-
var_dump($_POST);的输出是什么? -
感谢您的想法。尤其为 IE 开发者控制台干杯。我可以看到一瞬间发送了一个 POST(而且我的速度足够快,我可以看到正在发送相关的输入字段)。发送 POST 后的一瞬间,它使用 GET 而不是 POST 加载 PHP 页面。我认为我们已经将问题缩小到目标页面上出错的 http-equiv="refresh"。这导致它执行 GET。谢谢大家!
-
您可以/应该自己回答您的问题。然后接受您的答案,这样就会显示为已回答,并且解决方案有更好的文档记录,而不是隐藏在 cmets 中。