3

PHPでPOST/REDIRECT / GETデザインパターンを実装しようとしましたが、まったく同じページにリダイレクトすると、Safariでは機能しますがGoogle Chrome(Macの場合)では機能しません。URLを少し変更すると(たとえば、末尾にスラッシュを追加すると)、正常に機能します。

完全に機能する例を次に示します。

<?php
if(TRUE === isset($_POST['submit'])) {
    header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], true, 303);
    exit();
}?>
<html><head></head><body>
<form action="" method="post"><input type="submit" name="submit" value="submit" /></form>
</body></html>

ページに移動して送信ボタンをクリックしてからページを更新すると、フォームデータの再送信を確認するように求めるダイアログボックスが表示されます。私の検索では、上記のコードはPOST / REDIRECT / GETを実装するための適切な方法であり、動作するはずです(Safariでも動作します)が、MacのChromeでは動作しません。

4

2 に答える 2

3

あなたのコードは大丈夫のようです、あなたが経験していることは問題177855に関連していると思います:Chrome25でのリダイレクトの間違った処理

于 2013-03-11T06:17:49.187 に答える
-1

投稿したページを更新すると、そのポップアップボックスが表示されます。これは、ブラウザが、そのページに最初にアクセスしたデータを再送信する必要があるかどうかを知りたいためです。それはすべてのフォームで起こります。あなたはそれがクロムで動作しないと言います。エラーが発生しますか?リダイレクトしないだけですか?

また、アンカータグを使用して、誰かを新しいページに直接リンクするか、次のような回り道を使用する方が理にかなっています。

<a href="http://<?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>?act=forward">Forward</a>

また、フォームが送信されたかどうかを確認するのではなく、$ _GET["act"]が"forward"と等しいかどうかを確認します。

于 2013-03-11T06:07:21.287 に答える