私は Apache 2.2.22、PHP 5.3.10、および IE7 を使用しています (イントラネット上にあるため、IE のバージョンを制御することはできません)。私は新しいバージョンの Apache (私の php が完全に動作していた 2.4.3) を使用していましたが、ユーザーを認証する必要があり、どうやら 2.4.3 は mod_auth_sspi.so と互換性がありません。
とにかく、私は 3 つの php ページ (index.php --> stage2.php --> stage3.php) を持っています。index.php でフォームを送信し、stage2.php に投稿すると、値が正しく受信されます。しかし、stage2.php を送信して、stage3.php にすぐに (5 秒後) 値を送信しようとすると、$_POST 値が空になります。10秒待てば正常に動作します。
POST の代わりに GET を使用しても問題なく動作しますが、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 を使用してステージ 2 からステージ 3 にポストされるデータのサンプルを次に示します。
stage3.php?r1=729&save=Next&transcount=3&requesttype=invoice&requestedby=campbelld
奇妙なことに、設定されている入力のみを送信しています-stage2.phpには各検索結果のチェックボックスがあり、チェックされたもの(行1)のみが送信されるため、解決策が見つからない場合はGETを使用できます. 自宅でテストしていたとき、すべてのチェックボックスが送信されたため、URL が膨大になりました。