2011-12-29 16 views

答えて

6

フォーム入力を処理している別のURLにLocationヘッダーを送信することができます。この新しいURLは、フォームデータを送信する必要なく、ブラウザで利用できるようになります。

+0

私はこれを使用しました。どうもありがとう。私はちょうど私が起こったかったことの処理が完了した後、同じページをリダイレクトしていました。 – Darren

1

私はこれを行う良い方法があるとは思わない。過去にこれを達成したやり方は、投稿と投稿の間に最低でもlast_modifiedの日付と時間を持つことでした。 1時間くらい待っていないと、その投稿は拒否されます。

4

あなたがコントロールできないクライアント(ブラウザ)を停止することは、基本的には不可能です。非常に簡単で、あなたのケースで - - しかしそれは可能である。このに対するあなたのアプリ強化するために:あなたはフォームを表示すると、

  • をランダムにトークンを作成し、セッションに保管し、隠されたとしてフォームに追加しますフィールド
  • あなたが入力したフォームを受信すると、それはそれは

をセッションからトークンをクリア一致し、データを処理しない場合は、データを無視一致しない場合、セッションに対してトークンをチェックあらゆるヘッダーやその他のトリックは、ブラウザや人がマリを使わずに爽やかに動作するかもしれませんが、攻撃者に対しては絶対に役立たないでしょう。

1

私が知っている唯一のトリックは、フォームのサブミットを3番目のページに移動するためにjavascript(メタリフレッシュなど)を介してクリックするリンクを持つページを返すことです。

あなたがF5を押したときに爽やかになることは、フォームの送信ページではなくリンクページです。

5

使用ポスト/リダイレクト/取得します。その後、PHPプロセスのhttp://en.wikipedia.org/wiki/Post/Redirect/Get

コード内のフォーム、代わりにこのheader('Location: http://www.example.com/foo.php');(明らかにURLを置き換える)に置くものを出力すると、別のページの表示を行います。そのページに何かを渡す必要がある場合は、クエリ文字列を使用してください。$_GET[]

1

これを解決するために私は少し別のアプローチを取っています。私が開発したMVC環境では、ページを2度リダイレクトしました。データがデータベースに送信されていることを確認した後、私はこれが私の「リダイレクト」クラスと「blogcomment」メソッドを呼び出します

header("Location: http:// .... /redirect/blogcomment 

にリダイレクト。ここで、それは再び "リファラー"にリダイレクトされます。

public function blogcomment() { 
    $ref = $_SERVER['HTTP_REFERER']; 
    $page = "Location: " . $ref . "#commentform"; 
    header($page); 

} 

これは、フォームフィールドの直前にアンカータグを追加することで、その場所にすぐにジャンプします。もちろん、私はリダイレクトのカスタマイズにおいても多くの自由を得ることができます。これまでのところ、それは魅力のように機能します。

-1

2重ロード...ページを自分自身にリダイレクトすることは悪い習慣です。これを行うアプリケーションをデバッグしようとすると、それが起こっていることを認識するのがはるかに面倒になります。神の人々の愛のために、フォームを提出する必要がある場合は、別のスクリプトにまず送ってから、フォームを再送信するリフレッシュを削除したい場合は、デバッグするのがはるかに簡単です!

unset($_POST); 

を最後のコマンドとして:

関連する問題