我遇到了无法从 PHP 网站内的表单接收 $_POST 变量的问题。
为了澄清问题,我创建了这个简单的 PHP 脚本“POST_test.php”:
<?
print "POST:<pre>";
print_r($_POST);
print "</pre>";
?>
<form method="POST" action="POST_test.php">
<input type="submit" value="Save Changes">
<input type="hidden" name="blah" value="1">
</form>
假设我的 Apache Web 根目录是文件夹“web_root”,我的网站文件夹是“websiteA”。将上述脚本放入“web_root/websiteA”并单击 IE7 中的按钮会产生一个空的 $_POST 数组。将文件夹名称更改为“web_root/websiteA2”即可使其开始工作,并且它也可以在 Web 根目录中的其他网站(例如“websiteB”)中工作。使用火狐浏览器没有任何问题。最近,我们的系统启用了 NTLM 身份验证 - 我不知道这是否会产生影响。
Apache 和 PHP 运行在运行 Debian Linux(较旧版本)的服务器上。
我还尝试过在 IE 中按住 Ctrl 键刷新页面,但这没有帮助,重新启动电脑也没有帮助。
Update:该论坛帖子似乎描述了该问题:http://lists.rubyonrails.org/pipermail/rails/2006-March/027283.html
- 您不能将任何数据发布到混合
NTLM 和非 NTLM 验证的 Web
网站。微软浏览器
需要对所有内容进行 NTLM 身份验证
访问网站后的访问次数
的一个经过 NTLM 验证的文件夹
网站。
我可以按如下方式确认此行为:
当我访问时http://mydomain/websiteA/index.php then http://mydomain/websiteA/POST_test.php$_POST 不会通过提交测试页来填充。
但是,关闭所有 IE7 窗口,然后直接浏览http://mydomain/websiteA/POST_test.php显示 $_POST 是通过提交测试页填充的。
上面链接的论坛帖子中建议的解决方案之一似乎是:
我见过的让 IE 访问的唯一方法
“忘记”它以前
经过 NTLM 身份验证的站点会发送 401 页面状态。这
有效重置 IE 身份验证状态。