-
CookieSTUDY/프론트엔드 2021. 2. 8. 15:40
Cookie란?
- key와 value 값이 들어 있는 작은 데이터 조각으로 name, value, expires, path, domain, secure 정보를 가진다.
- 서버와 클라이언트에서 모두 저장하고 사용할 수 있다.
- 일정 기간 동안 데이터를 브라우저에 저장할 수 있다.* javascript
document.cookie = "Name=Value; Expires=날짜; Domain=도메인; Path=경로; Secure";
- name과 value : 데이터를 저장하고 읽는 데 사용하는 속성으로 쿠키를 사용할 때는 name과 value를 반드시 지정해야 한다.
- expires : 쿠키의 만료 날짜를 지정하는 것으로 GMT 또는 UTC 형식의 날짜를 입력해야 한다. 만료 날짜를 지정하지 않을 경우 브라우저가 종료될 때 쿠키가 삭제된다.
- domain : domain 속성을 설정하지 않으면 현재 도메인의 경로로 자동 입력된다. 페이지 요청과 비교해서 도메인의 경로와 domain 속성이 일치하지 않으면, 쿠키에 접근하는 것을 막으므로 domain 속성은 건드리지 않는다
- path : path 속성을 설정하지 않으면 현재 도메인의 경로로 자동 입력된다. 보통 "/특정 경로/" 로 설정되는데, 이렇게 설정하면 현재 경로 또는 현재 경로의 하위 경로에서 접근할 수 있다. "/"로 설정하면 도메인 내의 모든 곳에서 접근할 수 있다.
- secure : 해당 속성을 지정하면 SSL을 사용해서만 쿠키를 요청할 수 있다.
1. 쿠키 생성
function setCookie(name, value, expired) {
let date = new Date();
date.setDate(date.getDate() + expired);
let cookieValue = escape(value) + ("; expires=" + date.toUTCString()) + "; path=/";
document.cookie = name + "=" + cookieValue;
}2. 쿠키 읽어오기
function getCookie(cookieName) {
let cookieData = document.cookie;
let cookies = cookieData.split("; ");
let cookieValue = '';
for (let i=0; i<cookies.length; i++) {
if (cookies[i].split("=")[0] === cookieName) {
cookieValue = cookies[i].split("=")[1];
}
}
return unescape(cookieValue);
}3. 쿠키 삭제
function deleteCookie(cookieName) {
let date = new Date();
date.setDate(date.getDate() - 1);
document.cookie = cookieName + "= " + "; expires=" + date.toUTCString() + "; path=/";
}* JAVA
- 쿠키 생성
- 웹서버는 생성한 쿠키를 응답데이터의 헤더에 저장하여 웹브라우저에 전송한다.
- 쿠키 저장
- 웹 브라우저는 응답데이터에 포함된 쿠키를 쿠키 저장소에 보관한다.
- 쿠키 종류에 따라 메모리나 파일에 저장한다.
- 쿠키 전송
- 웹브라우저는 저장한 쿠키를 요청이 있을 때마다 웹서버에 전송한다.(삭제되기전까지)
- 사용자가 웹서버에 요청할 때마다, 요청한 url에 맞는 저장된 유효한 쿠키가 있는지 확인해서 그 쿠키를 요청시에 함께 전송한다.
- 웹서버는 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행한다.
1. 쿠키 생성
Cookie cookie = new Cookie("cookieName", "cookieValue");
// 쿠키n값에 한글을 사용시 인코딩 처리
// Cookie cookie = new Cookie("cookieName", URLEncoder.encode(cookieValue, "utf-8"));
// 쿠키 소멸 시간 설정(초단위) => 지정하지 않으면 웹브라우저 종료할 때 쿠키를 함께 삭제
cookie.setMaxAge(60*60*24);
// 쿠키 사용 범위(경로) 설정
cookie.setPath("/");
// 자바스크립트의 document.cookie를 이용해 쿠키에 접속하는 것을 막는 옵션 설정
cookie.setHttpOnly(true);
// 응답헤더에 쿠키 추가
response.addCookie(cookie);
// 인코딩 및 Content-Type 설정
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");2. 쿠키 사용
// 현재 도메인에서 사용중인 쿠키 정보 배열 가져오기
Cookie cookies [] = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println("cookie name : " + cookie.getName() + ", cookie value : " + URLDecoder.decode(cookie.getValue(), "UTF-8"));
}
}3. 쿠키 삭제
Cookie cookies [] = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
// 쿠키의 유효시간을 0으로 설정해서 바로 만료시킨다.
cookie.setMaxAge(0);
// 응답에 쿠키 추가
response.addCookie(cookie);
}
}4. 특정 쿠키 삭제
// 기존에 'name'이라는 쿠키가 존재할 경우 값을 null로 만든다.
Cookie cookie = new Cookie("name", null)
// 쿠키의 유효시간을 0으로 설정해서 바로 만료시킨다.
cookie.setMaxAge(0);
// 응답에 쿠키 추가
response.addCookie(cookie);'STUDY > 프론트엔드' 카테고리의 다른 글
Array.forEach() (0) 2021.05.06 Vue.js (0) 2021.04.28 Ajax Cache (0) 2021.04.28 History.replaceState() (0) 2021.02.04 DragEvent (0) 2021.02.04