ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cookie 객체
    Servlet-JSP 2022. 1. 14. 14:10

    **유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.

     

     

    앞에서 우리는 Application 객체와 Session 객체를 통해서 상태 값 유지하는 것을 배웠다.

    이 Application 객체와 Session 객체 말고도 Cookie라는 것으로 상태 값을 유지 할 수가 있다.

    이 세가지의 차이점은 

    헬스장의 탈의실을 예로 생각해보면 좀 더 쉽게 이해 할 수 있다.

    application은 다 같이 이용하는 공용탈의실, session은 개인이 사용 할 수 있는 락커 공간 그리고 cookie는 지니고 다닐 수 있는 락커 키 라고 생각해보면 좀 더 이해가 쉽게 될 것이다 .

     

    이 cookie는 상태값을 클라이언트가 가지고 왔다 갔다 할 수 있는 것이다. 이렇게 자기고 왔다갔다해서 상태값은 유지가 된다. 

     

    값을 저장 하는 공간은 이렇듯 세가지가 있는데 서버쪽에는 application, session이 있고 클라이언트 쪽에는 cookie가 있게 된다. 각각 저장공간의 특징을 이해해서 적절하게 서버에 둘 것인지 클라이언트에 둘 것인지를 결정 하면 된다.

    cookie를 사용하는 방법으로는 먼저 서버에서 심어서 보낼때에는 addCookie(); 그리고 클라이언트에서 요청을 보낼 경우에는 getCookies();를 사용해서 보낸다.

     

    우선

    쿠키를 저장 할 경우

    Cookie cookie = new Cookie("c", String.valueOf(result));
    response.addCookie();

    Cookie("key", value) 형식으로 적어줘야 한다. 

    "c"라는 key로 값을 심어서 보내게 되면 addCookie를 통해서 출력을 하게 되고 reponse에 심어진 것을 브라우저가 읽을 수 있게 되고 그것을 브라우저가 가지게 된다.

     

    이 쿠키는 브라우저에게 전달하는 값이라고 하고 

     

    나중에 브라우저가 사이트로 다시 요청을 하게 되면 이쪽 사이트에 cookie가 있었지 하고 다시 cookie를 보내오게 되고 

     

    쿠키를 읽어 올 경우

    Cookie[] cookies = request.getCookies();
    String _c = "";

    if(cookies != null)
       for(Cookie cookie : cookies)
         if("c".equals(cookie.getName()))
            _c = cookie.getValue();

    서버에서는 그 쿠키를 getCookies 복수형 배열로 오게 된다. (하나가 아니라 여러개가 심어 질 수 있기 때문에) 맵컬랙션 처럼 키와 값으로 여러개가 심어져서 올 수 있다.

    받아 오면 내가 심었던 쿠키를 찾는 작업이 필요하게 된다. 그래서 for문을 돌려서 내가 심어두었던 쿠키를 찾는 작업을 해야 한다.

     

    앞에 사용 했던 예제를 이용해서 cookie 사용법을 배워보다

     

    쿠키는 심어주는 것 먼저 해 주어야 한다.

    			Cookie valueCookie = new Cookie("value", v);
    			Cookie opCookie = new Cookie("op", op);

    Cookie값으로 사용 하는 것은 문자열로만 가능하고 url로 보낼 수 있는 문자 형태로만 작성 해 줘야한다.

    하지만 나중에 json이나 xml 등을 사용하게 되면 다양한 객체를 cookie로 만들어서 보낼 수 있게 된다.

     

    지금 우리가 작성 한 valuecookie에서 에러가 나기 때문에 문자열 형태로 변환 시켜줘야한다.

    Cookie valueCookie = new Cookie("value", String.valueOf(v)); //이렇게 문자열로 변환시켜준다.

     

    그리고 클라이언트에게 보내 줄 코드를 작성한다.

    response.addCookie(valueCookie); //클라이언트에서 보내 주기 위한 코드
    response.addCookie(opCookie); //클라이언트에서 보내 주기 위한 코드 response Header에서 심어지는 형태로 보내지게 된다.

    클라이언트에게 보내지는데 Header 부분에 심어지는 형태로 보내지게 된다.

    이것을 전달 받은 브라우저가 받은 쿠키를 저장하게 된다.

     

    쿠키가 잘 저장되면 설정에서 쿠키 사이트들이 보냈었던 쿠키들을 확인 해 볼 수 있다.

     

    그럼 이렇게 쿠키를 심어 준 다음 윗부분으로 올라가서 쿠키를 읽기 위한 변수를 선언 해 준다.

    (어플리케이션이랑 세션 선언 밑에 선언 해 주면 된다.)

    		Cookie[] cookies = request.getCookies();

     

    읽는 부분은 if 부분에 작성 해 준다.

    int x = 0; //찾은 쿠키 값을 담아야 할 그릇. 0으로 초기화 해 준다. 
    	for(Cookie c : cookies) 
    		if(c.getName().equals("value")); { // 내가 설정해준 이름을 찾아야하니깐 밑에 작성한 이름으로 비교
    			operator = c.getValue(); // 찾은 값을 x에 넣어줘야한다. 형변화도 해주고. 한번만 찾는게 아니니깐 for문을 돌려준다.
    				break; //찾았으면 break
    			}
    				
    int y =v; //지금 사용자가 저장한 value 값이라 v로 
     String operater="";
    	for(Cookie c : cookies) 
    		if(c.getName().equals("op")); { // 내가 설정해준 이름을 찾아야하니깐 밑에 작성한 이름으로 비교
    			x = Integer.parseInt(c.getValue()); // 찾은 값을 x에 넣어줘야한다. 형변화도 해주고. 한번만 찾는게 아니니깐 for문을 돌려준다.
    			 break; //찾았으면 break
    	}
Designed by Tistory.