2019.02.01 Cookie 만들기(2)

2019. 2. 1. 12:04JSP

#1  Cookie 와 Session의 차이


① Session

- 세션이란 서버측의 컨테이너에서 관리되는 정보, 세션의 정보는 컨테이너에 접속해서 종료되기까지,즉 

  브라우저를 종료할 때까지 유지되며, 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보는 더이상 

  유지되지 않게 설정 가능.

- 정보가 서버측에서 저장된다는 면에서 보안적으로 유리


- 보안이 필요한 정보를 공유하기 위해서는 서버측에서 관리될 수 있는 세션을 이용하는 것이 좋다.


Cookie

- 클라이언트측에서 관리되는 정보를 의미.


- 세션은 서버측에서 관리되지만 ,쿠키는 클라이언트에 정보가 저장된다.


- 브라우저의 종료와는 관계없이 쿠키 생성시 설정된 생존기간에 따라 쿠키가 유지된다.


- 쿠키는 클라이언트에 관리되기 때문에 보안에 취약하다 -> 하드디스크에 존재



#2 Cookie의 사용 예제


① cookieTest.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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>cookie</title>
</head>
<body>
    <% 
    // 클라이언트(브라우저)로부터 요청받을 때 전달받은 쿠키정보를 검색
    String name ="쿠키 이름값이 없음";
    String age = "쿠키 나이값이 없음";
    Cookie[] cookies = request.getCookies(); // 전달받은 쿠키는 배열로 저장 ,없다면 Null값이 전달받는다.
    if(cookies !=null){
        for(int i=0; i<cookies.length; i++){
            if(cookies[i].getName().equals("name")){
                name = cookies[i].getValue();
            }
            if(cookies[i].getName().equals("age")){
                age  = cookies[i].getValue();
            }
            
        }//for
        
    }
    %>
    <h1>cookieTest.jsp</h1>
    <h3>쿠키 이름값 : <%=name %></h3>
    <h3>쿠키 나이값 : <%=age %></h3>
 
    <input type="button" value="쿠키값 생성" onclick="location.href='cookieSet.jsp'">
    <input type="button" value="쿠키값 삭제" onclick="location.href='cookieDel.jsp'">
    
</body>
</html>
cs


② cookieSet.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"%>
 
<%
// Step1. 쿠키 생성
Cookie cookie1 = new Cookie("name","박보검"); // 쿠기는 문자열로만 저장이 가능
Cookie cookie2 = new Cookie("age","27");
 
// Step2. 쿠키 유효기간 설정 -반드시설정해야됨.
cookie1.setMaxAge(60*10); //초단위로 설정 , 수식으로 들어가도 된다.
cookie2.setMaxAge(60*5);
 
// 쿠기가 생성이 될 경로 지정 
// 경로에 상관없이 항상 쿠리를 받고자 하면 루트경로 ("/")로 지정
cookie1.setPath("/"); // 루트 경로를 프로그램 최상위 경로이므로 항상 서버로 돌아온다.
 
 
/* Step3. 클라이언트가 쿠키를 저장하도록 응답객체에 포함시킨다.
                 응답받은 클라이언트, 즉 브라우저는 서버가 시킨 대로 쿠키정보,유효기간,
                 쿠키를 보낸 웹서버의 URL주소와 함께 쿠키내용을 덱스트 파일로 저장한다.        
          */
response.addCookie(cookie1);
response.addCookie(cookie2); 
%>
<script>
alert('쿠키값이 생성됨');
//서버로 요청시 이전에 받은 쿠키들은 해당 서버에 전송
location.href='cookieTest.jsp'// 쿠키전송도 같이 돌아온다.
</script>
cs


③ cookieDel.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"%>
 
<%
    // Step1. 클라이언트(브라우저)가 보낸 모든 쿠키 가져오기 
    Cookie[] cookies =request.getCookies();
 
    // Step2.  쿠키값이 존재하는 지 null체크
    // Step3. 쿠키값의 유효기간을  0으로 설정
    // Step4. 해당 쿠키를 클라이언트로 보내서 갱신된 유효기간으로 저장하도록함 -> 0으로 설정된 유효기간으로 업데이트
    // Step5. 유효기간이 0이 된 쿠키는 자동삭제됨
    if(cookies != null){
        for(int i=0; i<cookies.length; i++){
            if(cookies[i].getName().equals("name")){
                cookies[i].setMaxAge(0); // 유효기간 0으로 변경
                // 쿠키를 생성할 때 경로지정을 했기 때문에 마친가지로 삭제할때도 경로지정을 해줘야된다.
                cookies[i].setPath("/"); 
                response.addCookie(cookies[i]); // 변경된 쿠키를 재전송
            }
            
        }//for
    }
    
%>
<script>
alert('쿠키 name값이 삭제됨');
location.href='cookieTest.jsp';
</script>
 
cs



실행화면