2009-06-23 9 views
14

TomcatでServlet API 2.5のCookieクラスを使用している問題があります。私はHttpServletRequestオブジェクトからのクッキーのリストを引き出し、そのようにそれらを反復:Java Servlet API 2.5 Cookie.getDomain()は常にnullを返します

Cookie[] cookies = request.getCookies(); 

for(Cookie cookie : cookies) { 
    System.out.println("Name=" + cookie.getName() + " Domain=" + cookie.getDomain()); 
} 

しかし、ドメインがnullのリクエスト内のすべての単一のクッキーのために。どうしてこれなの?私が求めているのは、2つの異なるドメインに同じ名前のクッキーがあり、ドメインに基づいてそれらを区別できるようにしたいからです。状況を明確にするために、同じ名前のクッキーが.anydomain.netと.subdomain.anydomain.netに設定されています。どちらもリクエストで送信されていますが、サーブレットに到達するとドメインはnullになります。サーブレットが送信されたクッキーのドメインを認識できないことが予想されますか?

編集:前回のリクエストでドメイン、有効期限、およびパスと共にCookieをサーブレットに設定しました。これらのCookieを使用してブラウザにアクセスする次の要求は、ドメインをnullとして示します。私は、クッキーがブラウザの正しいドメインに設定されていることを確認しました。

編集2:私は、Tomcatの6を使用してい

+0

setName()およびsetDomain()メソッドにブレークポイントを設定して、サーブレットコンテナがCookieヘッダを正しく解析するかどうかを確認できます。あなたのクッキーにコロン(:)が入っていますか?最近のTomcatのバージョンでは、ほとんどのクッキーをコロンで受け付けていません。 – akarnokd

答えて

22

は、あなたがリクエストクッキーの値以外のものを得ることができることを確認していますか? ブラウザは、HTTP Cookieヘッダーにname = valueだけを送信します。

その他の属性(secure、domain、path、expiration)は、自分で応答に設定したCookieでのみ使用できます。 これらは、Set-Cookie応答ヘッダーの作成に使用されます。

7

ドメインなどのプロパティは、レスポンスの一部である(つまり、Set-Cookieヘッダーにある)クッキーにのみ使用されます。クライアント(Webブラウザなど)は、正しいドメイン(パスなど)を持つCookieのみを送信する必要があります。ヘッダー自体(Cookie)には値しか含まれていないため、要求には値が表示されます。クライアントは、異なるドメインからサーバーにCookieを送信してはいけません。

関連する問題