JSP Servlet에서 쿠키(Cookie) 한글 저장시 에러 발생. 해결법?
이번에 세션으로 로그인부터 인증 하고 있었는데,
쿠키로 바꿔보라는 팀장님 지시에 따라서 쿠키로 바꿨습니다.
그러던 도중.. 사용자 이름을 쿠키로 굽는 순간 뙇!!
java.lang.IllegalArgumentException: Control character in cookie value or attribu**te. at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSuppo rt.java:192) at org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.j ava:214) at org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCook ie.java:187) at org.apache.catalina.connector.Response.generateCookieString(Response. java:1039) at org.apache.catalina.connector.Response.addCookie(Response.java:982) at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade .java:373) at com.winglish.login.service.LoginService.procLogin(LoginService.java:6 7) at com.winglish.login.servlet.LoginServlet.service(LoginServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:304)
에러가 터져주시네요
해결방법은
쿠키 추가시킬때
cookie = new Cookie(“userName”, URLEncoder.encode**(m.getMemName(),”utf-8”));
response.addCookie(cookie);
해주시구요
출력할때는
if (n.equals(“userName”)) Name = URLDecoder.decode((thisCookie.getValue()),”utf-8”);
요런 방법으로
해주시면 됩니다.
출처는 구글링에서 퍼온거고 소스는 제꺼에서 적용했을때 입니다.
아래는 쿠키 가져오는 문구 그냥 추가루요~
if(request.getCookies()!=null){** Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++) { Cookie thisCookie = cookies[i]; String n=thisCookie.getName(); if (n.equals(“쿠키 이름”)) mgr = thisCookie.getValue();
}
}
———————– 2013.05.31 ——————————————-
쿠키 생성 상세
출처 : http://utils.egloos.com/3225087
- 쿠키 생성
Cookie cookie = new Cookie(“cookie_key”, “value”); cookie.setMaxAge(606024*365); // 쿠키 유지 기간 - 1년 cookie.setPath(“/”); // 모든 경로에서 접근 가능하도록 response.addCookie(cookie); // 쿠키저장 }
- cookie 가져오기
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
cookies[i].getName(); cookies[i].getValue();
}
- 쿠키 삭제
cookies[i].setMaxAge(0); //쿠키 유지기간을 0으로함 cookies[i].setPath(“/”); //쿠키 접근 경로 지정 response.addCookie(cookies[i]); //쿠키저장
3번에서 빨간색으로 표시한 cookies[i].setPath(“/”); 이부분은 쿠키의 생성때와 똑같이 지정을 하지 않으면 삭제가 되지 않는다!!( 삽질좀 했죠.;;에휴 )
또한 쿠키 생성때 cookie.setDomain(“.aaa.com”) 과 같이 지정 할수 있는데 “.aaa.com” 과깉이 지정하면 [www.aaa.com](http://www.aaa.com/), sub.aaa.com, xxx.aaa.com 과같이 모든 서브 도메인에서 접근이 가능하다. 음.. 물론 저렇게 세팅하면 삭제시도 저렇게 해줘야겠죠? ( 한번해보세요 제가 해봤을땐 삭제시는 setDomain()과는 상관 없고 오로지 setPath(“/”) 였다는…
결론…setPath, setDomain 을 쿠키 생성할때 넣어줬으면 지울때도 반드시 넣어준다..!!!!!!
□ Cookie 클래스 ** ■ 정의** - 서블릿/JSP에서 쿠키를 위해 사용. ■ 쿠키를 웹 브라우저에 전달 - HttpServletResponse.addCookie() ■ 쿠키 설정 1) Cookie 객체를 만듬. 2) 쿠키에 속성을 부여. 3) 쿠키를 전송. ■ 생성자 ○ Cookie(String name, String value)** - 이름이 name이고 값이 value인 쿠키를 생성. ■ 속성을 부여할 수 있는 메소드 ○ void setComment(String purpose)** - 쿠키에 관련된 정보를 주석 형식으로 기술. ○ void setDomain(String pattern)** - 쿠키가 사용될 도메인을 설정. - 해당 도메인에 속해 있는 컴퓨터를 방문하면 웹 브라우저는 자동적으로 쿠키를 그 웹서버에 전송. ○ void setMaxAge(int expiry)** - 쿠키가 유효한 기간을 설정. (단위: 초) - 기간이 초과되면 쿠키는 삭제. - 이 속성을 기술하지 않으면 쿠키는 클라이언트 컴퓨터에 저장되지 않고, 현재 웹 브라우저가 실행되는 동안에만 유효. ○ void setPath(String url)** - 쿠키가 적용될 패스 정보를 설정. - 패스가 설정되면 해당되는 패스에 방문하는 경우에만 웹 브라우저가 웹 서버에 쿠키를 전송. ○ void setSecure(boolean flag)** - 보안을 설정. - flag가 true이면 보안성이 있는 채널(예:SSL)을 사용하는 경우에만 쿠키를 전송. ○ void setValue(String newValue)** - 쿠키 값을 설정. ■ 속성을 읽는 메소드 ○ String getComment()** - 쿠키의 목적 등을 기술하는 주석을 읽어 옴. ○ String getDomain()** - 쿠키의 도메인 이름을 얻어 옴. ○ int getMaxAge()** - 쿠키의 유효 기간을 얻어 옴. (단위: 초) ○ String getName()** - 쿠키의 이름을 얻어 옴. ○ String getPath() ** - 패스 정보(URI)를 얻어 옴. ○ boolean getSecure()** - 쿠키가 보안이 설정된 프로토콜에서만 보내지면 true, 아니면 false를 리턴. ○ String getValue()** - 쿠키 값을 얻어 옴.
| [출처]** 8. 쿠키, 세션, 필터 (쿠키) | 작성자 외계인셩 |