私は多言語サイトに取り組んでいるので、このアプローチを試しました:
echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
setcookie("lg", "ro");
echo $_COOKIE["lg"];
クライアントがlg
Cookieを持っていない場合(したがって、このサイトに初めてアクセスした場合)、Cookieを設定するという考え方ですlg = ro
そのユーザー。
このページに初めてアクセスした場合、最初と2番目のecho
は何も返さないことを除いて、すべて正常に機能します。 Cookieが設定されているページを更新してから、両方のecho
が期待する「ro」文字列を出力する場合のみ。
ユーザーの最初の訪問/ページの読み込みで2番目のecho
から値を見るためにこのCookieを設定するにはどうすればよいですか?ページを更新したり、リダイレクトを作成したりする必要はありません。
PHPマニュアル に従ってはいけません:
Cookieが設定されると、次のページの読み込み時に$ _COOKIEまたは$ HTTP_COOKIE_VARS配列を使用してアクセスできます。
これは、Cookieがブラウザーに応答ヘッダーで送信され、ブラウザーが次の要求でそれらを送り返す必要があるためです。これが、2番目のページの読み込みでのみ使用できる理由です。
ただし、setcookie()
を呼び出すときに$_COOKIE
を設定することでも回避できます。
if(!isset($_COOKIE['lg'])) {
setcookie('lg', 'ro');
$_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
Cookieはリクエスト時にonlyのみ送信されるため、割り当てられるとすぐに取得できません(リロード後にのみ利用可能)。
Cookieが設定されると、$ _ COOKIEまたは$ HTTP_COOKIE_VARS配列を使用して、次のページの読み込みでアクセスできます。
この関数を呼び出す前に出力が存在する場合、setcookie()は失敗し、FALSEを返します。 setcookie()が正常に実行されると、TRUEが返されます。このdoesnotは、ユーザーがCookieを受け入れたかどうかを示します。
Cookieは、Cookieを表示するページを次にロードするまで表示されません。 Cookieが正常に設定されたかどうかをテストするには、Cookieの有効期限が切れる前に、次の読み込みページでCookieを確認します。有効期限は、expireパラメーターによって設定されます。 Cookieの存在をデバッグする良い方法は、単にprint_r($ _ COOKIE);を呼び出すことです。