2011-09-07 2 views
1

서블릿 내부에서 (지속/크로스 브라우저 세션) 쿠키의 데이터를 올바르게 설정하고 필터에서 읽는 데 문제가 있습니다.서블릿으로 쿠키 처리

String encodedValue = new String(Base64 
     .encodeBase64(req.getParameter("account").getBytes())); 
    Cookie cookie = new Cookie("projectAuthenticationCookie", encodedValue); 
    cookie.setMaxAge(24*60*60); 
    cookie.setPath("/"); 
    res.addCookie(cookie); 

이 응답 내부의 쿠키를 얻을 것이다,하지만 나는 다음과 같은 코드 내 필터 내에서 그것을 읽을 때 :

서블릿의 코드 (시간에 로그를 실행하는)입니다

Cookie authenticationCookie = null; 
    Cookie[] cookies = ((HttpServletRequest) request).getCookies(); 
    for (Cookie cookie : cookies){ 
     if ("projectAuthenticationCookie".equals(cookie.getName())) { 
      authenticationCookie = cookie; 
     } 
    } 

내가 설정 한 값만 가져오고 다른 모든 필드는 null이거나 비어 있거나 다를 수 있습니다. 예를 들어 최대 사용 기간은 항상 -1을 반환하므로 쿠키가 지속되지 않습니다.

cookie return values

내가 가진 만료 헤더를 설정하려 : 나는 유효한이 헤더를 만료하지 않고 세션이 어쨌든 시간이 초과 것을 읽을

res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000); 

, (만약 내가 잘못 날 수정)하지만, 그것도 도움이되지 않았다 ...

내가 생각하고있는 한 가지 문제점은 localhost (cookie.setDomain ("localhost") 설정도 시도했지만 행운 없음)에서 실행 중이다. 내 웹 서버/셀 렛 컨테이너는 Jetty 7입니다. 그러나 이것이 적합하다고는 생각하지 않습니다.

힌트 : 어떤 힌트가 있습니까?

+0

왜이 정보가 필터에 정확히 필요합니까? maxage가 만료되면 클라이언트는 단순히 쿠키를 다시 보내지 않습니다. 서버가 유효한지 여부를 알 필요없이 서버에 체크인 만하면됩니다. – BalusC

답변

6

요청에서 얻은 쿠키에 이름과 값 이외의 필드가 채워지지 않으므로 의미가 없습니다.

이 필드는 브라우저에 최대 수명을 알리기위한 것입니다. 경로 등이 있지만 브라우저는이 정보를 서버로 되돌려 보내지 않습니다. 올바른 최대 나이, 경로 등을 갖는 것이 중요한 경우는 쿠키를 생성하여 응답에 추가하는 것입니다. 브라우저를 사용하여 서버 쪽에서 올바른 정보를 찾으려고하지 않고 올바른 정보가 저장되어 있는지 확인하십시오.