38

私は多言語サイトで作業しているので、このアプローチを試しました。

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];

クライアントがCookieを持っていない場合lg(したがって、クライアントがこのサイトに初めてアクセスしたとき)、lg = roそのユーザーにCookieを設定するという考え方です。

このページに初めて入ると、1回目と2回目はecho何も返さないことを除いて、すべて正常に動作します。ページを更新した場合にのみCookieが設定され、両方ともecho期待する「ro」文字列を出力します。

echoユーザーの最初の訪問/ページ読み込みの2番目からの値を確認するために、このCookieを設定するにはどうすればよいですか?ページを更新したり、リダイレクトを作成したりする必要はありません。

4

2 に答える 2

95

答え

PHPのマニュアルによるとできません:

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

これは、Cookieが応答ヘッダーでブラウザーに送信され、ブラウザーは次の要求でCookieを返送する必要があるためです。これが、2ページ目の読み込みでのみ使用できる理由です。

回避策

$_COOKIEただし、電話をかけるときに設定することで回避できsetcookie()ます。

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
于 2012-05-24T13:40:01.450 に答える
13

Cookieはリクエスト時にのみ送信されるため、割り当てられた直後に取得することはできません(リロード後にのみ使用可能)。

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

この関数を呼び出す前に出力が存在する場合、setcookie()は失敗し、FALSEを返します。setcookie()が正常に実行されると、TRUEが返されます。これは、ユーザーがCookieを受け入れたかどうかを示すものではありませ

Cookieは、Cookieが表示されるページが次に読み込まれるまで表示されません。Cookieが正常に設定されたかどうかをテストするには、Cookieの有効期限が切れる前に、次の読み込みページでCookieを確認します。有効期限は、expireパラメータを介して設定されます。Cookieの存在をデバッグする良い方法は、単にprint_r($ _ COOKIE);を呼び出すことです。

ソース

于 2012-05-24T13:39:10.247 に答える