我在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」)中工作。使用Firefox時沒有問題。最近,NTLM身份驗證在我們的系統中啓用 - 我不知道這是否會有所作爲。
Apache & PHP運行在運行Debian Linux(稍微舊版本)的服務器上。
我也嘗試了IE瀏覽器頁面的ctrl-refresh,這並沒有幫助,也沒有重新啓動我的電腦。
更新:這個論壇帖子出現對問題進行描述: http://lists.rubyonrails.org/pipermail/rails/2006-March/027283.html
- 您不能發佈任何數據混合 NTLM和非NTLM身份驗證的Web站點 。在您訪問 一個經過NTLM認證的 網站文件夾後,Microsoft Internet Explorer 需要NTLM身份驗證才能訪問網站的所有 。
如下我可以證實這種行爲:
當我訪問http://mydomain/websiteA/index.php然後http://mydomain/websiteA/POST_test.php $ _ POST沒有提交測試頁填充。
但是,關閉我所有的IE7窗口然後直接瀏覽到http://mydomain/websiteA/POST_test.php顯示$ _POST是通過提交測試頁面填充的。
而且從上面鏈接論壇上發帖建議的解決方案之一似乎是:
我所看到的讓IE瀏覽器 的唯一途徑「忘記」它曾 NTLM身份驗證的網站發送401頁面狀態。這個 有效地重置IE認證狀態。
請問如果你改變了'action'屬性的值,以'?'工作? – alex 2011-03-22 00:32:11
否 - 該URL只是獲取?最後,但結果是一樣的。 – 2011-03-22 00:50:26
這描述了一個POST數據與NTLM的問題: http://lists.rubyonrails.org/pipermail/rails/2006-March/027283.html 我會嘗試一些測試以查看行爲是否相似 – 2011-03-22 01:02:46