1

Web サイトにアクセスするさまざまな方法を処理するために、サーブレット フィルターをセットアップしました。フィルタの目的の 1 つは、エントリに Cookie を設定することです。以下のコードは、Chrome、Safari、および Firefox で完全に機能しますが、IE では気に入らないようです。いくつかの制約により、JavaScript で Cookie を設定できません。

Cookie cookie = new Cookie(COOKIE_NAME, COOKIE_VALUE);
cookie.setPath("/"); //Note: I've tried removing this.
cookie.setDomain(SITE_DOMAIN); //Note: I've tried removing this.
response.addCookie(cookie);

最大有効期限と有効期限のさまざまな組み合わせを試しましたが、何もうまくいかないようです。デバッガーを実行しましたが、コードが実行されていることは確かです。

また、レコードについては、Tomcat 6 を使用しています。Cookie の名前と値はどちらも 10 文字程度の長さの文字列です。

4

2 に答える 2

2

これは、Cookie の値に空白など、バージョン 0 Cookieの無効な文字が含まれている場合に発生します。このような Cookie 値を使用すると、平均的なコンテナーは自動的にバージョン 1 の Cookieに切り替わりますが、これは IE9 以前ではサポートされていません。

Cookie 値に、バージョン 0 Cookie の不正な文字が含まれていないことを確認する必要があります。これは、Cookie#setValue()javadoc で次のように指定されています。

バージョン 0 の Cookie では、値に空白、括弧、括弧、等号、カンマ、二重引用符、スラッシュ、疑問符、アットマーク、コロン、およびセミコロンを含めることはできません。空の値は、すべてのブラウザーで同じように動作するとは限りません。

実際の Cookie 値を制御できない場合は、URLEncode設定する前とURLDecode取得中にそれを使用することをお勧めします。

以下も参照してください。

于 2012-12-21T05:09:34.877 に答える