基本的な状況と基本的な関連情報:<doctype>
開始タグ
の前に実行されるphpコードがあります。希望は、(必要に応じて)他のものがロードされる前に、ユーザーのブラウザーの言語設定に基づいてリダイレクトを送信することでした。
スクリプトは、サポートされている最高の言語設定に基づいて2つのことを実行しようとします。
- php:
setcookie()
を使用して、2文字の言語コードでCookieを作成します。- Cookie名=値の例:x_language = es
- php:header( "Location:"。$ requestedSite);を使用します。サブドメインにリダイレクトするには、
- ドメインの例:es.domain.com
例:
if (isset($_COOKIE['x_language'])) {
-Determine correct subdomain based on cookie value-
-If not currently on that subdomain, redirect to it-
} else {
setcookie('x_language','es',time() + 31536000 ,'/','.domain.com' );
header("Location: " . $requestedSite);
}
問題: Firefoxは完全に機能します。Chrome(およびその他のブラウザ)はCookieをまったく認識できません。
私はそれをこれに要約しました:
print_r($_COOKIE)
Firefoxで正しく動作し、美しい、入力された配列を返します。print_r($_COOKIE)
Chromeで失敗し、空の配列を返します。
これが問題の核心です。Chromeが認識しないため、私の関数はCookieの存在を認識しません。
- すべてのブラウザがCookieを受け入れるようにしました。
- 私は開発ツールをチェックして、Cookieがすべてのブラウザーに配置されていることを確認しました(そうです)。
- Cookieの値は、次のページが読み込まれるまで利用できないことに気付きましたが、ここでは問題にはなりません。設定しても読めません。
- 最初のsetcookie()を超える出力はありません。
では、Chrome(および他のブラウザ)に独自のCookieを認識させるにはどうすればよいですか?!これがFirefoxで問題なく機能するのに、他の場所では失敗する理由を誰かが知っていますか?
ひばりでこれを試してみることにしました。次のものだけを含むファイルを作成しました。
<?php
print_r($_COOKIE);
?>
繰り返しになりますが、FirefoxにCookie配列が表示されます。一方、Chrome、IE、Opera、Safariでは、空の配列が表示されます。これはサーバーの問題でしょうか?