-4

PHPでsetCookie関数を使用してCookieを設定しようとしています。初めてブラウザを起動したとき、動作しません。ページをリロードすると、サーバーから Cookie を受信して​​います。これは、$_SERVER["http_referer"] が受信されない場合に setCookie() 関数が機能していないことを証明しています。この問題を解決するための php.ini ファイルの設定はありますか?

4

3 に答える 3

5

あなたの結論は間違っています。HTTP ヘッダーを送信しないようにブラウザーを構成することで、それを証明できます。Referer

setcookie() マニュアルページから:

Cookie が設定されると、次のページ読み込み時に $_COOKIE または $HTTP_COOKIE_VARS 配列を使用してアクセスできます。

平易な英語で言えば、これは、送信されたものではなく、ページによって受信$_COOKIEされた Cookie が含まれていることを意味します。


編集: PHP に送信 Cookie を$_COOKIE自動的に追加させることはできませんが、自分で行うことを妨げるものは何もありません。スーパーグローバルは読み取り専用ではありません。

setcookie("TestCookie", $value);
$_COOKIE["TestCookie"] = $value;
于 2013-07-04T10:38:43.217 に答える
0

私の知る限り、ページを更新すると Cookie がアクティブになります。$_SERVER['HTTP_REFERER']が設定されているかどうかは問題ではありません。

Cookie が設定されると、次のページ読み込み時に $_COOKIE または $HTTP_COOKIE_VARS 配列を使用してアクセスできます。$_COOKIE などのスーパーグローバルは、PHP 4.1.0 で使用できるようになったことに注意してください。Cookie 値も $_REQUEST に存在します。

Cookie の使用方法については、こちらのドキュメントを参照してください。

于 2013-07-04T10:39:12.030 に答える
0

$_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
}
于 2013-07-04T10:40:15.030 に答える