Php $\对于一个子文件夹,IE7中的POST变量为空
我遇到了一个问题,PHP网站中的表单没有接收到$u POST变量 为了澄清这个问题,我创建了这个简单的PHP脚本“POST_test.PHP”:Php $\对于一个子文件夹,IE7中的POST变量为空,php,apache,post,internet-explorer-7,Php,Apache,Post,Internet Explorer 7,我遇到了一个问题,PHP网站中的表单没有接收到$u POST变量 为了澄清这个问题,我创建了这个简单的PHP脚本“POST_test.PHP”: 假设我的Apache web根目录是文件夹“web_根目录”,我的网站文件夹是“websiteA”。将上述脚本放在“webroot/websiteA”中,并单击IE7中的按钮,将生成一个空的$\upost数组。将文件夹名称更改为“web_root/websiteA2”将使其开始工作,并且在web根目录下的其他网站(如“websiteB”)中也可以工
假设我的Apache web根目录是文件夹“web_根目录”,我的网站文件夹是“websiteA”。将上述脚本放在“webroot/websiteA”中,并单击IE7中的按钮,将生成一个空的$\upost数组。将文件夹名称更改为“web_root/websiteA2”将使其开始工作,并且在web根目录下的其他网站(如“websiteB”)中也可以工作。使用Firefox时没有问题。最近,我们的系统中启用了NTLM身份验证—我不知道这是否会产生影响
Apache和PHP运行在运行Debian Linux(有点旧的版本)的服务器上
我还尝试过在IE中按ctrl键刷新页面,但没有效果,重启电脑也没有效果
更新:此论坛帖子似乎描述了以下问题:
尝试填写你的“动作”属性,因为我认为在IE7中保留此属性为空实际上是行不通的。谢谢你的建议 事实证明,问题是由以前对不相关页面的请求引起的,该页面使用了NTLM身份验证,如下所示(或类似):
验证完成后,在IE关闭并重新打开之前,所有$u POST数据都将接收为空。到目前为止,我已经解决了这个问题,删除了上面的代码,而是安排Apache在我们的Intranet中使用NTLM(它设置了$_SERVER['REMOTE_USER']变量)。(在我们的内部网之外,仍然使用Apache身份验证)。可以通过禁用IE中的预身份验证来解决此问题。在注册表中: 在编辑菜单上,将值name
DisableNTLMPreAuth
添加为类型REG\u DWORD
,并将数据值设置为1(true)
有关更多信息,请参阅和。经过努力,我找到了解决此问题的窍门。我在php中使用了整个ntlm身份验证代码作为一个包含文件,在该文件中完成了身份验证,之后我无法发布任何表单,因为ntlm和非ntlm问题混合在一起,这可能会更改页面的标题 因此,您所要做的就是在站点的每个页面的开头都包含相同的ntlm身份验证代码,这样就可以做到这一点 问题解决了……:)
希望这能帮助很多人。如果将
操作
属性的值更改为?
?不-URL只得到一个值,它是否有效?最后,结果是一样的。这说明了NTLM的POST数据存在一个问题:我将尝试一些测试,看看行为是否相似。您是否能够将$\u GET
s传递给脚本~?这可能是某种标头截断吗?~将脚本更改为action=“POST_test.php”会得到相同的结果。它通常是有效的,但在较早版本的Safari中存在错误。要解决Safari问题,可以使用?
值。但是如果这只在客户端有效,那么对web开发人员来说是没有用的,对吧?既然O.P.实际上没有提出问题,我认为没有理由否决解决方案。在某些情况下,此解决方案是完全可以接受的。谢谢,但如果您有不想编辑的第三方应用程序,则此解决方案就不太好了。感谢您的回复,但在进行了大量研究后,我到目前为止未发现任何结果。。除此之外,还有另一种解决方案,即编辑windows注册表值,在大多数情况下,该值是用户无法接受或访问的。哦,其他信息。。谷歌上有人在谈论使用cookies存储ntlm信息,然后发送401请求以清除ntlm标题,然后使用cookie获取所需信息,这样当你清除你的ntlm标题时,它就不会干扰POST方法。但是我试过了,甚至再也找不到链接。。因此,如果有人尝试并取得任何成功,请把它放在这里。。
<?
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>
<?php
if (!isset($headers['Authorization'])){
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM');
exit;
}
?>
"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings"