티스토리 뷰

반응형

출처 카페 > 남궁성의 자바(java)초보.. | 초보jsp
원문 http://cafe.naver.com/javachobostudy/73413

 이번에 세션으로 로그인부터 인증 하고 있었는데,

쿠키로 바꿔보라는 팀장님 지시에 따라서 쿠키로 바꿨습니다.

 

그러던 도중.. 사용자 이름을 쿠키로 굽는 순간 뙇!!

 

---------------------------------------------------------------------------

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

 

1. 쿠키 생성 

Cookie cookie = new Cookie("cookie_key", "value");
cookie.setMaxAge(60*60*24*365); // 쿠키 유지 기간 - 1년
cookie.setPath("/"); // 모든 경로에서 접근 가능하도록 
response.addCookie(cookie); // 쿠키저장
}

 

2. cookie 가져오기
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
cookies[i].getName(); 
cookies[i].getValue();
}


3. 쿠키 삭제
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, 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()
- 쿠키 값을 얻어 옴.


반응형

'Web Development > Jsp' 카테고리의 다른 글

jQuery를 이용한 xml 크로스 도메인 해결 방법.  (0) 2015.01.10
Servlet 에서 Forward 새로고침 문제. (저의 해결 법)  (0) 2015.01.10
jstl forEach 문  (0) 2015.01.10
jstl 만지기  (0) 2015.01.10
jsp 개발 환경 설정  (0) 2015.01.10