20

単純に使用するユーザーログイン/登録システムがあります

// execute queries, set cookies, etc. here
header("Location: " . getenv("HTTP_REFERER"));

私は最近exit();とに関する投稿を読みましたdie();が、これらを使用することになっているとは思いもしませんでした. 私が理解していることから、彼らはPHPを終了させますか? あれは正しいですか?これに向けて作業できる最善の方法は何ですか。これらの関数のいずれかを header(); の直後に追加するだけです。私が持っている実行?

login.php/register.php を介して AJAX、jQuery を読み込んでいますが、何らかの影響がありますか?

編集: header(); の後以外に、exit();またはdie();関数をどこで使用する必要がありますか? また、Perl ではより多く使用されているのexit();に対し、PHP ではより多く使用されていますか?die();

4

6 に答える 6

38

私はこれについても答えを探していました。私が見つけたもの:

なぜ die() または exit():

スクリプトの後に die() または exit() を配置しないheader('Location: http://something')と、予期しない動作が発生する可能性があります。これにより、たとえば、リダイレクト (HTTP 301) で実際に防止したかったコンテンツが開示される可能性があります。上記は、ブラウザーがレンダリングしない可能性があるため (301 が原因で)、エンド ユーザーに直接表示されない場合があります。結論として、exit() および die() 関数は、スクリプトの続行を停止します。

違い:

機能がないように見えるので、機能の違いも知りたいと思いました。ただし、PHP では、ヘッダー出力に明確な違いがあります。以下の例では、別のヘッダーを使用することを選択しましたが、exit() と die() の違いを示すために重要ではありません。

Exit() の動作中

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

結果:

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

Die() の動作中

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

結果:

HTTP/1.1 304 Not Modified 
Connection: close

違い

したがって、die()は接続を閉じますが、exit()は閉じません。接続を開いたままにするか閉じるかは、パフォーマンスに依存します。どちらにも長所と短所があり、特定の要件によって異なります。

Wiki での HTTP 持続接続

于 2014-01-05T10:31:47.303 に答える
11

http://php.net/manual/en/function.exit.php

http://php.net/manual/en/function.die.php

この関数は、スクリプトの実行を中断するために使用されます。を使用するか、スクリプトの実行を停止する必要があります。そうしないと、スクリプトが最後まで実行されるため、予期しない動作が発生する可能性があります。exitdieheader("Location: " . getenv("HTTP_REFERER"));

于 2011-12-29T09:32:30.320 に答える
4

回答はすでに受け入れられていますが、誰もが質問で明白なWTFを見逃しているようです:

header("Location: " . getenv("HTTP_REFERER"));
  1. リファラーを返すことは、ユーザー エージェント側のオプションです。

  2. 簡単に偽装できる

  3. ログインに失敗したことをユーザーに伝える方法はありません

  4. 認証失敗の HTTP セマンティック通信はありません

  5. 環境変数 HTTP_REFERER はリクエスト ヘッダー変数と同じである必要がありますが、RFC 3875 では指定されていません。したがって、リクエストで Web サーバーに提示された場合でも、getenv("HTTP_REFERER") は異なる値を返す場合があります。

于 2011-12-29T13:08:43.910 に答える