쿠키(Cookie)
사용자의 ID 혹은 암호까지 기억하는 경우를 보았을 것이다. 이것은 웹 브라우저가 ID 혹은 암호를 사용자의 컴퓨터에 저장하고 있기 때문에 가능하다. 이처럼 웹 서버가 전달한 정보를 웹 브라우저가 컴퓨터에 저장하는 것을 쿠키(Cookie)라고 한다. 쿠키는 다양하게 활용될 수 있는데, 대표적인 사용 예로 사용자 ID와 암호를 기억함으로써 사이트를 편리하게 사용할 수 있도록 하거나 혹은 사용자의 방문 횟수를 기억하돌고 함으로써 사용자의 웹 사이트 사용 유형을 파악하는 것이 있다. 쿠키는 넷스케이프사에서 처음 제안되었고, RFC 2109로 문서화 되었다.
● 관련정보 : http://en.wikipedia.org/wiki/HTTP_cookie (영문)
● 관련정보 : http://ko.wikipedia.org/wiki/HTTP_쿠키 (한글, 간략함. 영문 참조바람)
※ 쿠키 : 서버가 자신이 필요한 정보를 클라이언트에 심어놓는 것. 클라이언트가 접속시 자신(서버)이 심어놓은 쿠키 파일을 불러온다. 사용자 ID와 비밀번호, 방문횟수, 사용 패턴등을 분석 가능하다.
- 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) 쿠키의 이름, 값이 필요하다.
Cookie c1 = new Cookie("id", "honeymon");
c1.setMaxAge(60 * 60 * 24 * 365); => 1년간 유지됨
c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.
웹 브라우저에 쿠키 전송하기
쿠키의 속성값이 설정되면, 서블릿/JSP는 HttpServletResponse 클래스를 이용해서 웹 브라우저에 쿠키를 설정한다. 이 때 HttpServletResponse으 addCookie() 메소드를 사용한다.
response.addCookie(cookie); --> res.addCookie(c1);
쿠키 정보 얻기(뽑기!)
클라이언트에 설정된 쿠키 정보는 웹 브라우저가 다시 웹 사이트를 방문할 때 웹 브라우저에 의해 자동적으로 웹 서버에 전달한다. 쿠키로부터 정보를 얻어 오려면 다음과 같은 절차를 따른다.
[1] 사용자의 요청에서 모든 쿠키를 얻는다.
[2]. 원하는 쿠키를 이름을 통해서 얻는다.
[3]. 찾은 쿠키로부터 값을 얻는다.
|
- Cookie[] cookies = request(=req).getCookies();
- for ( Cookie mycookie : cookie ) {
String n = mycookie.getName();
- }
String value = mycookie.getValue();
|
ex) 서블릿/JSP 에서 쿠키 얻기
Cookie[] cookies = request(=req).getCookies();
ex) 쿠키의 이름을 이용해서 원하는 쿠키 찾기
for ( Cookie mycookie : cookie ) {
String n = mycookie.getName();
}
ex) 쿠키의 값 추출하기
- String value = mycookie.getValue();
CookieTest.java
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를 증가시킴)
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>");
}
}
이 글은 스프링노트에서 작성되었습니다.