ホームページ >バックエンド開発 >PHPチュートリアル >PHP で `setcookie()` を使用した後、Cookie 値が失われるのはなぜですか?

PHP で `setcookie()` を使用した後、Cookie 値が失われるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-14 11:12:12823ブラウズ

Why is My Cookie Value Missing After Using `setcookie()` in PHP?

Cookie のアクセシビリティについて

問題: setcookie() の後に予期せず Cookie 値が存在しない

PHP で $_COOKIE を使用して a の値を取得するsetcookie() を呼び出した直後に新しく作成された Cookie は、目的の値が使用できなくなる可能性があります。この現象は、HTTP Cookie 処理の非同期の性質から発生します。

時間の物語: クライアントとサーバーの相互作用

setcookie() が呼び出されると、PHP スクリプトは Cookie を作成するコマンドを発行します。それを送信 HTTP 応答に含めます。ただし、スクリプトの実行が完了するまで、応答はクライアント (ブラウザーなど) に送信されません。

$_COOKIE 変数は現在の HTTP リクエストに含まれる Cookie を反映するため、HTTP リクエスト中に Cookie に加えられた変更はすべて反映されます。サーバー側スクリプトの実行は、$_COOKIE ではすぐには利用できません。

Cookie 利用可能タイムライン

タイムライン:

  1. setcookie() が呼び出されます。
  2. スクリプトの実行が続行され、$_COOKIE 変数が変更されます。
  3. スクリプトの実行が完了すると、完全な HTTP 応答が返されます。新しく作成されたCookieを含めて、クライアントに送信されます。
  4. クライアント側では、新しいCookieが設定されますが、ブラウザは、次の HTTP リクエストまでこの Cookie をサーバーに送り返しません。
  5. その後のスクリプトの実行では、$_COOKIE 変数には新しく作成された Cookie の値が含まれます。

問題の解決

$_COOKIE に新しく設定された Cookie 値が確実に反映されるようにするには、同じ内部でそれをオーバーライドします。 script:

setcookie('uname', $uname, time() + 60 * 30);
$_COOKIE['uname'] = $uname;

このアクションは、送信 HTTP 応答に Cookie を作成し、その値を $_COOKIE 変数に即座に設定して、現在のスクリプト実行内で使用できるようにします。

以上がPHP で `setcookie()` を使用した後、Cookie 値が失われるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。