-
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로 인코딩해서 값을 가져오는 거
'JSP' 카테고리의 다른 글
ajax(This XML file does not appear to have any style information associated with it. The document tree is shown below.) 에러 (0) 2020.06.15 JSP(Session, 세션) (0) 2020.06.11 JSP(Exception) (0) 2020.06.10 JSP(buffer) (0) 2020.06.10 JSP(웹 애플리케이션 내 전역 활용 상수 선언) (0) 2020.06.10