PHPでsetCookie関数を使用してCookieを設定しようとしています。初めてブラウザを起動したとき、動作しません。ページをリロードすると、サーバーから Cookie を受信しています。これは、$_SERVER["http_referer"] が受信されない場合に setCookie() 関数が機能していないことを証明しています。この問題を解決するための php.ini ファイルの設定はありますか?
3 に答える
あなたの結論は間違っています。HTTP ヘッダーを送信しないようにブラウザーを構成することで、それを証明できます。Referer
Cookie が設定されると、次のページ読み込み時に $_COOKIE または $HTTP_COOKIE_VARS 配列を使用してアクセスできます。
平易な英語で言えば、これは、送信されたものではなく、ページによって受信$_COOKIE
された Cookie が含まれていることを意味します。
編集: PHP に送信 Cookie を$_COOKIE
自動的に追加させることはできませんが、自分で行うことを妨げるものは何もありません。スーパーグローバルは読み取り専用ではありません。
setcookie("TestCookie", $value);
$_COOKIE["TestCookie"] = $value;
私の知る限り、ページを更新すると Cookie がアクティブになります。$_SERVER['HTTP_REFERER']
が設定されているかどうかは問題ではありません。
Cookie が設定されると、次のページ読み込み時に $_COOKIE または $HTTP_COOKIE_VARS 配列を使用してアクセスできます。$_COOKIE などのスーパーグローバルは、PHP 4.1.0 で使用できるようになったことに注意してください。Cookie 値も $_REQUEST に存在します。
Cookie の使用方法については、こちらのドキュメントを参照してください。
$_COOKIE は、PHP スクリプトが実行される前に設定されます (ユーザーが既に持っている Cookie を使用して)。呼び出しsetcookie()
ても、$_COOKIE グローバル変数は自動的に更新されません。ただし、次のページの読み込みでは正しく入力されます。
ユーザーがサーバーからページを要求すると、そのドメイン用に持っているすべての Cookie がサーバーに送信されます。サーバーはそれを使用して $_COOKIE グローバル変数を設定し、スクリプトを実行します。
関数を呼び出すとsetcookie()
、クライアントに返される応答にヘッダーが追加され (ページ全体の実行が終了した後にのみ送信されます)、この新しい Cookie を保存するように指示します。そのため、ユーザーが次にページをリクエストしたときに、この新しい Cookie があなたに送信されます。
コードでこれを「修正」するには、次のようにします。
<?php
if (!isset($_COOKIE['my_cookie']))
{
setcookie('my_cookie', 'value');
$_COOKIE['my_cookie'] = 'value';
}
// do logic with $_COOKIE here
if (isset($_COOKIE['my_cookie']) && $_COOKIE['my_cookie'] = 'x')
{
// do something
}