Cookie란?
쿠키는 웹사이트에 접속할 때 생성되는
정보를 담는 임시 파일을 말한다.
(저장되는 위치는 클라이언트의 컴퓨터이다.)
일반적으로 4kb이하의 크기로 생성된다.
쿠키의 본래 목적은 사용자의 정보를 유지시키고
접속 시 바로 로그인 되도록 하기 위함이다.
그러나 이러한 방법이 개인정보 유출의
빌미가 될 수 있는 탓에,
대다수의 브라우저는 로그인에 대한 정보를
유지할 것인지, 유지하지 않을 것인지
유저에게 선택권을 주고 있다.
(실제 크롬을 이용하여 로그인을 할 경우
이 사이트에서 비밀번호를 저장할 것인지 물어본다.)
쿠키는 서버에 요청(request)할 시 포함되기 때문에,
쿠키가 많으면 많을수록 요청의 속도는 느려진다.
세션은 단순히 유지되는 것이고,
쿠키는 저장되는 것이어서
보안 면에서는 세션이 상대적으로
뛰어나다고 할 수 있다.
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie에 대해 알아보자</title> </head> <body> <h1>쿠키를 설정하고 불러오자</h1> <hr> <h3><a href="./L01SetCookie.jsp">쿠키 설정하기</a></h3> <h3><a href="./L02GetCookie.jsp">쿠키 가져오기</a></h3> <h3><a href="./L03RemoveCookie.jsp">쿠키 삭제하기</a></h3> <h3><a href="./L04LastDate.jsp">접속한 마지막 날짜 알아보기</a></h3> </body> </html> | cs |
쿠키를 설정하고, 생성하는 방법.
L01SetCookie.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>쿠키 설정</title> </head> <body> <h1>쿠키 설정</h1> <% //쿠키는 브라우저 저장되는 개체이다.(파일처럼) //쿠키를 생성하고 response 객체에 담으면 저장완료. //세션처럼 유지되는 것이 아니라 저장에 가깝기 때문에 브라우저(response)에 넘긴다. Cookie c = new Cookie("id", "jsplesson");//생성과 동시에 파라미터를 저장 Cookie c2 = new Cookie("pwd","admin1234"); Cookie c3 = new Cookie("name","tako"); //만약 유효시간을 설정하지 않으면 브라우저 종료시 삭제된다. c.setMaxAge(365*24*60*60);//일*시*분*초 c2.setMaxAge(5*60); c3.setMaxAge(120); response.addCookie(c); response.addCookie(c2); response.addCookie(c3); %> <h3>설정완료</h3> <h3><a href="javascript:history.go(-1)"><button>뒤로가기</button></a></h3> </body> </html> | cs |
쿠키를 가져오고, 정보를 확인하는 방법.
L02GetCookie.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>쿠키 가져오기</title> </head> <body> <h1>쿠키 가져오기</h1> <% Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { %> <h3><%=cookie.getName()%> : <%=cookie.getValue()%></h3> <% } %> <hr> <h3> 세션아이디 : <%=session.getId()%></h3> <!-- 클라이언트가 최초 접속시 session과 cookie가 생성되는데 이 때, cookie는 sessionId를 가진다. --> <h3> <a href="javascript:history.go(-1)"><button>뒤로가기</button></a> </h3> </body> </html> | cs |
쿠키를 삭제하는 방법.
L03RemoveCookie.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>쿠키 삭제</title> </head> <body> <h1>쿠키의 maxAge를 0으로 만들어서 삭제</h1> <% Cookie[] cookies = request.getCookies(); for(Cookie c : cookies){ c.setMaxAge(0); response.addCookie(c); //response의 요청은 서버에서 클라이언트에 보내는 최종 응답. //page가 모두 loading 될 때 응답이 완료된다. } %> <h3>Cookie 삭제 완료</h3> <% Cookie[] cookies2 = request.getCookies(); //이때 request 객체는 response가 되기 전 객체이기 때문에 //클라이언트가 요청하는 시점의 cookie를 가지고 있다. for(Cookie c : cookies2){ %> <h3><%=c.getName()%> : <%=c.getValue()%></h3> <% } //아직 응답이 완료된 상태가 아니기 때문에 출력이 된다. 새로고침 시 출력되지 않음. %> <h3><a href="javascript:history.go(-1)"><button>뒤로가기</button></a></h3> </body> </html> | cs |
위 코드를 실행할 경우, 최초 삭제 페이지 접근 시 쿠키가 삭제되었다는 메세지와 함께 쿠키의 내용이 출력되는 것을 확인할 수 있는데, 쿠키가 삭제되었음에도 불구하고 쿠키가 출력되는 이유는 request와 response를 살펴보면 알 수 있다.
request객체는 클라이언트가 페이지를 요청할 시, 바로 그 시점의 쿠키를 가지고 페이지를 출력할 준비를 한다.
response객체는 서버에서 클라이언트에 보내는 최종 응답으로, 페이지를 모두 불러온 후 응답이 완료된다.
이러한 이유로 쿠키가 삭제되었음에도 불구하고 쿠키의 정보가 출력되는 것이다.
최초 접근 이후 새로고침을 하면 쿠키가 삭제되어 출력되지 않는다.
쿠키를 이용하여 웹페이지의 마지막 방문일을 알아보기.
L04LastDate.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <%@page import="java.text.SimpleDateFormat"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import = "java.util.Date"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>마지막 방문일을 알아보자</title> </head> <body> <h1>lastDate 쿠키를 만들어서 방문일을 담자</h1> <% Cookie lastDate = null; //new Cookie("lastDate", nowDate) String nowDate = ""+System.currentTimeMillis(); //cookie의 value로 문자열을 저장하기 위해 //lastDate라는 쿠키가 없으면 최초 방문이다. -> lastDate 쿠키를 만든다. //최초 방문이면 "처음 방문입니다." 라는 메세지를 출력 //최초 방문이 아니면 언제 접속했는지 lastDate를 출력하라 //오랜만에 접속 시 비밀번호를 바꾸게 한다. //강의 페이지 -> 접속하지 않으면 여러가지 메세지. Cookie[] cookies = request.getCookies(); if(cookies!=null){//null을 for문으로 돌릴 수 없기 때문에. for(Cookie cookie : cookies){ if(cookie.getName().equals("lastDate")){ lastDate = cookie; //이 때는 최초 방문이 아니다. } } } if(lastDate==null){ %> <h3>처음 방문입니다. 환영합니다.</h3> <% lastDate = new Cookie("lastDate", nowDate); lastDate.setMaxAge(365*24*60*60); //lastDate.setPath("./");//./기본경로 "/" 절대경로로 지정하지 말 것. //(Localhost:3306)/절대경로로 지정하면 다른 프로젝트에서도 쿠키카 유효함 //(Localhost:3306/L01Cookie/) 상대경로 response.addCookie(lastDate); }else{ long conv = new Long(lastDate.getValue()).longValue(); //String type -> long type으로 변환 Date date = new Date(conv); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); %> <h3>당신의 마지막 방문일은 : <%=sdf.format(date)%></h3> <% lastDate.setValue(nowDate); //마지막 방문일 업데이트 response.addCookie(lastDate); } %> </body> </html> | cs |
'JSP > 기본다지기' 카테고리의 다른 글
JSP 8일차 필기 (EL 태그) (0) | 2016.10.28 |
---|---|
JSP 7일차 필기 (Bean) (0) | 2016.10.26 |
JSP 6일차 필기 (Session을 이용한 로그인) (0) | 2016.10.25 |
JSP 6일차 필기 (Session) (0) | 2016.10.25 |
JSP 6일차 필기 (Template) (0) | 2016.10.25 |