본문 바로가기

JSP/기본다지기

JSP 7일차 필기 (Cookie)

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