쿠키(Cookie)

사용자의 ID 혹은 암호까지 기억하는 경우를 보았을 것이다. 이것은 웹 브라우저가 ID 혹은 암호를 사용자의 컴퓨터에 저장하고 있기 때문에 가능하다. 이처럼 웹 서버가 전달한 정보를 웹 브라우저가 컴퓨터에 저장하는 것을 쿠키(Cookie)라고 한다. 쿠키는 다양하게 활용될 수 있는데, 대표적인 사용 예로 사용자 ID와 암호를 기억함으로써 사이트를 편리하게 사용할 수 있도록 하거나 혹은 사용자의 방문 횟수를 기억하돌고 함으로써 사용자의 웹 사이트 사용 유형을 파악하는 것이 있다. 쿠키는 넷스케이프사에서 처음 제안되었고, RFC 2109로 문서화 되었다.

● 관련정보 : http://en.wikipedia.org/wiki/HTTP_cookie (영문)

● 관련정보 : http://ko.wikipedia.org/wiki/HTTP_쿠키 (한글, 간략함. 영문 참조바람)

 

※ 쿠키 : 서버가 자신이 필요한 정보를 클라이언트에 심어놓는 것. 클라이언트가 접속시 자신(서버)이 심어놓은 쿠키 파일을 불러온다. 사용자 ID와 비밀번호, 방문횟수, 사용 패턴등을 분석 가능하다.

230px-Choco_chip_cookie.jpg

  • MS IE : Cookie 라는 폴더
  • 파폭 등은 cookie.txt
  • 쿠키 제한 : 모두 300개 까지만 사용가능
  • 쿠키 최대 크기 : 4KB

 

● 서블릿/JSP는 쿠키를 위해서 Cookie 클래스를 제공한다. 쿠키를 웹 브라우저에 전달하기 위해서는 HttpServletResponse의 addCookie() 메소드를 이용한다.

쿠키 설정하기 절차(심기)

[1]. Cookie 객체를 만든다.

[2]. 쿠키에 속성을 부여한다.

[3]. 쿠키를 전송한다.

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

res.addCookie(c1);

ex) Cookie(String name, String value) 쿠키의 이름, 값이 필요하다.

  • void setMaxAge(int expiry) 쿠키의 유효한 기간을 설정(단위 : 초)
  • void setValue(String newValue) 새로운 쿠키 값을 설정한다.

    • 정수로 변환시 Integer.parseInt(); 를 사용해준다.

 

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(60 * 60 * 24 * 365); => 1년간 유지됨

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

 

웹 브라우저에 쿠키 전송하기

쿠키의 속성값이 설정되면, 서블릿/JSP는 HttpServletResponse 클래스를 이용해서 웹 브라우저에 쿠키를 설정한다. 이 때 HttpServletResponse으 addCookie() 메소드를 사용한다.

  1. response.addCookie(cookie); --> res.addCookie(c1);

 

쿠키 정보 얻기(뽑기!)

클라이언트에 설정된 쿠키 정보는 웹 브라우저가 다시 웹 사이트를 방문할 때 웹 브라우저에 의해 자동적으로 웹 서버에 전달한다. 쿠키로부터 정보를 얻어 오려면 다음과 같은 절차를 따른다.

[1] 사용자의 요청에서 모든 쿠키를 얻는다.

[2]. 원하는 쿠키를 이름을 통해서 얻는다.

 

 

[3]. 찾은 쿠키로부터 값을 얻는다.

  1. Cookie[] cookies =  request(=req).getCookies();
  2. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
  3. }
    String value = mycookie.getValue();

 

ex) 서블릿/JSP 에서 쿠키 얻기
  1. Cookie[] cookies =  request(=req).getCookies();

 

ex) 쿠키의 이름을 이용해서 원하는 쿠키 찾기
  1. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
    }

 

ex) 쿠키의 값 추출하기
  1. String value = mycookie.getValue();

 

CookieTest.java

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

 

CookieTest.java(수정판 : 읽을 때마다 Count를 증가시킴)

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");

                    if ( cookie.getName().equals("count") ) {
                        //value에 1을 더하고 새로운 value를 세팅
                        value = Integer.toString(Integer.parseInt(cookie.getValue()) + 1);
                        //새값이 설정된 쿠키를 브라우저로 전송
                        Cookie countCookie = new Cookie("count",value);
                        res.addCookie(countCookie);

                        //cookie.setValue(value);
                        //res.addCookie(cookie);  이녀석도 된다. ㅡㅅ-)>
                    }
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            Cookie countCookie = new Cookie("count","0");
            countCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);
            res.addCookie(countCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

CookieTestRun.JPG CookieTest.JPG

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts