날짜 정보는 Date 객체를 사용해 toGMTString() 함수로 변경해서 날짜 문자열을 생성해서 사용한다.
쿠키 값은 특수문자나 2바이트 문자 처리를 위해서 escape() 함수로 이스케이핑을 하는 것을 추천한다.
escape() 함수
알파벳과 숫자 및 *,@,-,+,.,/를 제외한 문자를 모두 16진수 문자로 바꿔준다.
쉼표와 세미콜론 같은 문자가 쿠키 문자열과의 충돌을 피하기 위해 사용
unescape() 함수
이 함수로 이용해 원상태로 복구 할 수 있다.
//쿠키 저장
// expiredays 는 일자 정수 - 365년 1년 쿠키
// setCookie(변수이름, 변수값, 기간);
function setCookie(key, value, expiredays) {
let todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expiredays); // 현재 시각 + 일 단위로 쿠키 만료 날짜 변경
//todayDate.setTime(todayDate.getTime() + (expiredays * 24 * 60 * 60 * 1000)); // 밀리세컨드 단위로 쿠키 만료 날짜 변경
document.cookie = key + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";";
}
setCookie('snack', 'Kitkat', 30); // key: snack, value: Kitkat인 쿠키를 30일간 저장
쿠키는 별도의 삭제 기능이 없고 만료시간이 현재시간 이전이면 만료되어 삭제 되므로, 만료 시간을 현재 시간이전으로 설정하고 기존 쿠키를 덮어쓰면 된다.
//쿠키 삭제
//쿠키는 삭제가 없어서 현재 시각으로 만료 처리를 함.
// delCookie(변수이름);
function delCookie(key){
let todayDate = new Date();
document.cookie = key + "=; path=/; expires=" + todayDate.toGMTString() + ";" // 현재 시각 이전이면 쿠키가 만료되어 사라짐.
}
delCookie('snack'); // snack 쿠키 삭제
정규표현식을 이용해 쿠키들을 분리하고, 일치하는 쿠키 키를 가진 쿠키를 반환한다.
setCookie()함수는 escape()함수로 이스케이핑을 했으므로 unescape()함수로 복원한다.
// 쿠키 읽기
// getCookie(변수이름);
function getCookie(key) {
const value = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)'); // 쿠키들을 세미콘론으로 구분하는 정규표현식 정의
return value? unescape(value[2]) : '';
};
getCookie('snack'); // Kitkat
쿠키는 같은 키가 있으면 기존 쿠리를 덮어쓰므로 별도로 정의할 필요가 없다.
setCookie()로 기존 쿠리를 덮어쓰면 된다.
// 쿠키 수정
setCookie('snack', 'pie', 20); // snack의 value를 pie로 기간을 20일로 변경
[참조] https://velog.io/@guswlsapdlf/Session-Cookie-Persistent-Cookie
[참조] https://jeong-pro.tistory.com/80
[참조] https://it-eldorado.tistory.com/90
[참조] https://triplexlab.tistory.com/114