ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP(Cookie)
    JSP 2020. 6. 11. 11:19

     - 쿠키는 저장되어 있으면 요청할때 마다 전송하려고 하는 성격을 가지고 있다.

     

        -> 동일한 도메인, 동일한 패스일경우에만 전송하도록 제한 할 수 있다.

     


    쿠키의 구성

    항목 설명
    이름 각각의 쿠키를 구별하는데 사용되는 이름
    쿠키의 이름과 관련된 값
    유효시간 쿠키의 유지 시간
    도메인 쿠키를 전송할 도메인
    경로 쿠키를 전송할 요청 경로

     

    - 쿠키의 네임 규약

     

     1. 쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.

     

     2. 콤마(,), 세미콜론(;), 공백(' ') 등의 문자는 포함할 수 없다.

     

     3. $로 시작할 수 없다.

     


    쿠키 관련 설명

     

    - 쿠키 생성 : 클라이언트(브라우저 : 자바 스크립트)

                    서버(자바 : 응답객체의 응답 헤더에 저장 후 클라이언트에 전송됨)

    -  쿠키 저장소 : 클라이언트(브라우저)

    -  브라우저 별 상이한 저장소 형태 - 해당 브라우저의 메모리 활용

                                                 해당 브라우저가 인스톨된 폴더 내

    -  쿠키 사이즈 : 4KB 이내로 생성

    -  쿠키 성향 : 클라이언트(브라우저의 쿠키 저장소)에 저장된 쿠키는 해당 클라이언트 브라우저의 서버 대상 요청시

     

                       마다 요청 헤더에 포함되어 전송되려는 성향이 존재

                          * 전송 제한 : 쿠키 생성 시 패스, 도메인 속성을 활용

    -  쿠키 생성 패턴 : 키=값;유효시간 =값;패스=값;도메인=값;

    -  쿠키 패스 속성 : default / (컨텍스트 루트 : 루트)

    -  쿠키 도메인 속성 : default 해당 쿠키 생성시 요청 도메인

    -  쿠키 유효시간(만료시간) : 해당 쿠키 생성시 선언된 쿠키의 삭제까지 남은 시간

                                          default -1(해당 쿠키가 저장된 브라우저의 종료시까지 종속)

    -  쿠키는 보안에 취약함

        아래와 같이 아이디나 비밀번호같이 프라이빗한 정보들은 쿠키에 저장하면 안되고 노출되어도

     

       괜찮은 정보들을 저장해야함


    쿠키 생성

     

    <%
    
        Cookie memidCookie = new Cookie("mem_id", "a001");
        
    	memidCookie.setPath("/");
        
    	response.addCookie(memidCookie);
        
    	
    	Cookie mempwdCookie = new Cookie("mem_pass","asdfasdf");
        
    	//초단위 설정
        
    	mempwdCookie.setMaxAge(60*60*24);
    	
    	// http://localhost/ddit/07/makeCookie.jsp - 브라우저 저장소에 저장된 쿠키가 전송되어짐
        
    	// http://localhost/ddit/06/makeCookie.jsp - 브라우저 저장소에 저장된 쿠키가 전송 x
        
    	mempwdCookie.setPath("/ddit/07/");
        
    	response.addCookie(mempwdCookie);
    	
    	// 쿠키저장소에 저장된 인코딩 타입 : ISO-8859-1(라틴어)
        
    	// UTF-8(김은대) => 쿠키 저장소에 전송 -> ISO-8859-1(UTF-8(김은대)) - > 쿠키 저장소로부터 취득 -> UTF-8(김은대) -> UTF-8로 디코딩 후 활용  
        
    	Cookie memnameCookie = new Cookie("mem_name", URLEncoder.encode("김은대", "UTF-8"));
    	
    	//특정 도메인으로 전송할때만 쿠기정보가 전송되도록 설정
        
    	memnameCookie.setDomain("www.bagrant.co.kr");
        
    	memnameCookie.setPath("/ddit/07");
        
    	memnameCookie.setMaxAge(60*60);
        
    	response.addCookie(memnameCookie);
    	
    	// == > "mem_name" = UTF-8(김은대);유효시간=60*60;도메인=www.bagrant.co.kr;path=/ddit/07
    			
    	
    	
    %>

     

    * localhost -> www.bagrant.co.kr로  로 바꾸는법

     


    쿠키 보기

     

    <%@page import="java.net.URLDecoder"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    	// 클라이언트(브라우저)의 쿠키 저장소에 저장된 쿠키는 쿠키 생성시, 패스, 도메인 속성을 기초로 해당 클라이언트의 서버 대상 요청시
        
    	// 동반 전송(요청 패킷의 요청 헤더 )
        
    	Cookie[] cookies = request.getCookies();
        
    	for(Cookie cookie : cookies){
        
    		out.println("key :" + cookie.getName()); // getName이 cookie의 key값
            
    		out.println("key :" + URLDecoder.decode(cookie.getValue(), "UTF-8") + "<br/>"); // getValue가 cookie의 Value값
            
    	}
    %>
    

     


    쿠키 수정

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    
    	Cookie[] cookies = request.getCookies();
        
    	for(Cookie currentCookie : cookies){
        
    		if("mem_id".intern() == currentCookie.getName().intern()){
            
    			Cookie memidCookie = new Cookie("mem_id","b00");
                
    			memidCookie.setPath("/");
                
    			response.addCookie(memidCookie);	
                
    		}
    	}
    	
    	// makeCookie.jsp -> viewCookie.jsp -> modifyCookie.jsp
        
    	// viewCookie.jsp
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    쿠키가 잘 수정 되었습니다.
    </body>
    </html>

    쿠키 삭제

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%
    	Cookie[] cookies = request.getCookies();
        
    	for(Cookie currentCookie : cookies){
        
    		if("mem_id".intern() == currentCookie.getName().intern()){
            
    			Cookie memidCookie = new Cookie("mem_id","a001");
                
    			memidCookie.setPath("/");
                
    			memidCookie.setMaxAge(0);
                
    			//해당 쿠키의 유효시간(만료시간)을 0으로 설정 후
                
    			// 응답객체의 응답헤더에 저장 및 클라이언트의 쿠키 저장소에
                
    			// 저장처리로 해당 쿠키를 즉시 삭제
                
    			response.addCookie(memidCookie);	
                
    		}
    		// makeCookie.jsp -> viewCookie.jsp -> deleteCookie.jsp -> viewCookie.jsp
            
    	}
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	쿠키가 바사삭 조각이 나버렸습니다.
    </body>
    </html>

    쿠키 set, get, delete js파일

     

     

    function Get_Cookie( check_name ) {
    	var a_all_cookies = document.cookie.split( ';' );
    	var a_temp_cookie = '';
    	var cookie_name = '';  // 쿠키 이름
    	var cookie_value = '';  // 쿠키 값
    	var b_cookie_found = false; 
    	for (var i = 0; i < a_all_cookies.length; i++ ){  // 모든 쿠키 가져 와서 loop
    		a_temp_cookie = a_all_cookies[i].split( '=' );  // 쿠키 이름과 값을 나눔
    		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');  // [=] 기호 앞의 값을 쿠키
    		if ( cookie_name == check_name ){// 이름으로
    				b_cookie_found = true;
    			if ( a_temp_cookie.length > 1 ){
    				// [=] 기호 뒤의 값을 쿠키값으로
    				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );  
    			}
    			return cookie_value;  // cookie 값 리턴
    			break;
    		}
    		a_temp_cookie = null; // temp 쿠키를 비워줌
    		cookie_name = ''; // 쿠키 이름을 비워줌
    	}
    	if ( !b_cookie_found ) {
    		return null;
    	}
    }
     
    function Set_Cookie( name, value, expires, path, domain, secure ) {
    	var today = new Date();
    	today.setTime( today.getTime());
    	if ( expires ){
    		expires = expires * 1000 * 60 * 60 * 24;
    	}
    	var expires_date = new Date( today.getTime() + (expires) );
    	document.cookie = name + "=" +escape( value ) +
    				( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    				( ( path ) ? ";path=" + path : "" ) + 
    				( ( domain ) ? ";domain=" + domain : "" ) +
    				( ( secure ) ? ";secure" : "" );
    }
    
    function Delete_Cookie( name, path, domain ) {
    	if ( Get_Cookie( name ) ) document.cookie = name + "=" +
    		( ( path ) ? ";path=" + path : "") +
    		( ( domain ) ? ";domain=" + domain : "" ) +
    		";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }
    
    
    
    

     

     

    document.cookie 쿠키저장소에 접근할 수 있는 출입구

     

    escape : unicode로 인코딩해서 값을 가져오는 거

    댓글

Designed by Tistory.