3


ドイツ語と英語を切り替えることができる多言語ウェブサイトを持っています。選択した言語を Cookie に保存して、訪問者が次に Web サイトにアクセスしたときに、好みの言語に何度も切り替える必要がないようにしたいと考えています。残念ながら、私はそれで奇妙な振る舞いをしています。次のようになります。

言語を切り替えるためのリンクがあります(onclick)。この関数は次のようになります。

function storeLanguage(lang)  {
    /*deletes the cookie? */
    document.cookie = "MYCOOKIE=; expires=Thu, 01-Jan-70 00:00:01 GMT;";
    var ablauf = new Date();
    var expTime = ablauf.getTime() + (60 * 24 * 60 * 60 * 1000); //Cookie for 60 days
   ablauf.setTime(expTime);

   if (lang == 'en')  {
            document.cookie = "MYCOOKIE=EN; expires=" + ablauf.toGMTString() + ";";
   }
   else  {
       document.cookie = "MYCOOKIE=DE; expires=" + ablauf.toGMTString() + ";";
   }
}

Firebug は、右の IF ブランチにジャンプすると言うので、「ドイツ語」をクリックすると、この部分が「MYCOOKIE=DE」で実行され、それ以外の場合は英語ブランチが実行されます。これは正しく見えます。しかし、自分の Web サイトの任意の Web ページにアクセスすると (テストのためにインデックス サイトを選択しました)、

alert(document.cookie);

関数が右側の IF 分岐 (else 分岐) にジャンプしたため、"MYCOOKIE=DE" のはずが、ドイツ語の Web ページ "MYCOOKIE=EN" で突然結果として表示されます。英語に切り替えると、英語の Web ページ "MYCOOKIE=DE; MYCOOKIE=EN" に結果が表示されます。突然、同じ名前の 2 つの Cookie が存在します。したがって、Cookie の値は単に反転されたり、正しく削除されたりするだけでなく、完全にがらくたです。この動作につながるコードの何が問題なのか、誰か説明できますか?

4

1 に答える 1

1

Cookie のパスも正しく設定していることを確認してください。たとえば、サイトの言語が URL に埋め込まれている場合 (IE: http://yoursite.com/en/index.html )、パスに「/en」が含まれている場合にのみ有効になるように Cookie を設定している可能性があります。完全な Cookie 設定構文は次のようになります。

document.cookie = 'mycookie=somevalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/'
于 2011-05-31T18:20:38.260 に答える