2009-06-23 5 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입니다. 왜 이런거야? 내가 두 가지 다른 도메인에 같은 이름의 쿠키가 있고 도메인을 기반으로 쿠키를 구별 할 수 있기를 원하기 때문에 내가 묻는 이유가 있습니다. 상황을 명확히하기 위해 동일한 이름의 쿠키가 .anydomain.net 및 .subdomain.anydomain.net에 설정되어 있습니다. 요청에서 둘 다 전송되지만 도메인이 서블릿에 도착하면 null입니다. 서블릿이 보내진 쿠키의 도메인을 볼 수 없다는 것이 예상되는 동작입니까?

편집 : 서블릿에 대한 이전 요청의 도메인, 만료 및 경로와 함께 쿠키를 설정합니다. 이러한 쿠키로 브라우저에 들어오는 다음 요청은 도메인을 null로 표시합니다. 쿠키가 브라우저의 올바른 도메인에 설정되는지 확인했습니다.

편집 2 : 나는 톰캣 6을 사용하고

+0

setName() 및 setDomain() 메서드에 중단 점을 설정하여 서블릿 컨테이너가 쿠키 헤더를 올바르게 구문 분석하는지 확인할 수 있습니다. 쿠키에 콜론 (:)이 있습니까? 최근 Tomcat 버전은 콜론이있는 대부분의 쿠키를 허용하지 않습니다. – akarnokd

답변

22

당신은 당신이 요청 쿠키의 값을 제외하고 아무것도 얻을 수 있는지 확인 있습니까? 브라우저는 HTTP 쿠키 헤더에 name = value 만 보냅니다.

다른 속성 (보안, 도메인, 경로, 만료)은 사용자가 직접 응답으로 설정 한 쿠키에만 사용할 수 있습니다. Set-Cookie 응답 헤더를 만드는 데 사용됩니다.

7

도메인과 같은 속성은 쿠키가 응답의 일부인 경우 (예 : 설정 - 쿠키 헤더)에만 사용됩니다. 웹 브라우저와 같은 클라이언트는 올바른 도메인 (경로 등)이있는 쿠키 만 보내야합니다. 따라서 헤더 자체 (쿠키)에는 값만 포함되어 있으므로 요청에는 값만 표시됩니다. 귀하의 클라이언트는 다른 도메인의 쿠키를 서버에 보내면 안됩니다.

관련 문제