我正在使用 Apache 2.2.22、PHP 5.3.10 和 IE7(它在工作 Intranet 上,所以我无法控制 IE 的版本)。我使用的是更高版本的 Apache(2.4.3,我的 php 在其上运行良好),但我需要对用户进行身份验证,显然 2.4.3 与 mod_auth_sspi.so 不兼容。
无论如何,我有 3 个 php 页面(index.php --> stage2.php --> stage3.php)。当我在 index.php 上提交表单并发布到 stage2.php 时,会正确接收这些值。但是,如果我随后提交 stage2.php 并尝试立即(5 秒后)将值发布到 stage3.php,则 $_POST 值为空。如果我等待 10 秒,它会正常工作。
如果我使用 GET 而不是 POST,它也可以正常工作,但 stage2.php 是一个搜索结果页面,并且可能必须将大量变量传递给 stage3.php。我不知道 URL 长度是否有限制,但可能有数千个字符,具体取决于找到的结果数量。
另外,我过去曾尝试将标头设置为过期,但没有成功。
if(!strpos(strtolower($_SERVER[HTTP_USER_AGENT]), "msie") === FALSE) {
header("HTTP/1.x 205 OK");
} else {
header("HTTP/1.x 200 OK");
}
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, cachehack=".time());
header("Cache-Control: no-store, must-revalidate");
header("Cache-Control: post-check=-1, pre-check=-1", false);
我错过了什么吗?是否有设置发布表格之间的时间的设置?
迪翁
更新@aleation
实际页面很大,但我可以使用简单的 html 表单(test_form.html 和 test_form.php)重新创建问题。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="RequestForm" method="post" action="test_form.php">
<input name="firstname" type="text" id="firstname">
<input name="lastname" type="text" id="lastname">
<input type="submit" class="nextbutton" id="next_button" name="save" value="Send">
</form>
</body>
<?php
$first = $_POST["firstname"];
$last = $_POST["lastname"];
echo "first name = " . $first . "<br>";
echo "last name = " . $last;
?>
@aleation 不幸的是,服务器在我的工作内联网上。以下是使用 GET 从 stage2 发布到 stage3 的数据示例:
stage3.php?r1=729&save=Next&transcount=3&requesttype=invoice&requestedby=campbelld
奇怪的是,它只发送那些设置的输入 - stage2.php 为每个搜索结果都有一个复选框,它只发送一个被选中的(第 1 行),所以如果我找不到解决方案,那么毕竟可以使用 GET . 当我在家进行测试时,它会发送每个复选框,因此 URL 最终会变得很大。