javascript

쿠키(cookie)

전주천둥새 2023. 5. 15. 15:30

1. 쿠키

- 브라우저에서의 쿠키는 브라우저에 간단한 텍스트형태로 데이타를 저장 할 수 있는 수단

- 쿠키 저장시 유지시간을 설정가능

▼html

<!-- 쿠키 공통 함수가 저장된 외부파일 불러오기 -->
	<script type="text/javascript" src="cookie.js"></script>
	<script type="text/javascript">
		/*
			쿠키에 데이타 저장 하는 코드			
			document.cookie = "key=value; expires=유지시간(date); path=/;";
			
			setCookie, getCookie 함수는 
			모든 페이지에서 사용되는 공통 함수 임으로 외부파일로 만든다.
			(만든 파일 명 cookie.js)			
		*/
		
		//myName이라는 명칭으로 홍길동 값을 하루 유지 시키겠다.
		setCookie('myName', '홍길동', 1);
		setCookie('myAge', 20, 1);
		
		console.log(document.cookie, '저장된 쿠키값 확인');
						
		console.log(getCookie('myName'), '쿠키값 가지고 오기');
	</script>

 

▼js파일(cookie.js)

/**
 * 쿠키 저장 및 호출 함수
 * 
 * document.cookie = "key=value; expires=유지시간(date); path=/;";
 */

function setCookie(cname/*키*/, cvalue/*값*/, exdays/*유지 일*/) {
	const d = new Date(); //오늘 날짜 기준으로 날짜 정보 객체화
	//오늘 날짜 시간을 숫자형태로 가지고 오기 + 하루 기준으로 날짜 계산 후 매개변수값 곱하기
	//날짜 정보 객체화 된 정보로 계산된 날짜를 재갱신
	d.setTime(d.getTime() + (exdays*24*60*60*1000));
	//쿠키에 저장될 수 있는 날짜 문자열로 변수에 저장
	let expires = "expires="+ d.toUTCString();
	//쿠키에 저장 될 수 있는 포맷형태로 문자결합 연산자를 활용하여 연산 시켜 저장
 	document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname/*키*/) {
	//name 이라는 변수  key= 문자 결합을 하여 저장
	let name = cname + "=";
	//쿠키의 데이타 중 인코딩된 데이타를 디코딩하여 원본으로 복원
	//decodedCookie 변수에 쿠키에 저장된 문자열을 대입
	//예)myName=홍길동; myAge=20
	let decodedCookie = decodeURIComponent(document.cookie);
	/*
		split('문자열') -> 문자열 객체의 메서드 : 인수에 삽입된 문자열 기준으로 
		문자열을 쪼개어 배열로 변환
		예) ['myName=홍길동', ' myAge=20']
	*/
	let ca = decodedCookie.split(';');
	//배열로 변환된 쿠키값을 반복문을 통해 요소에 접근
	for(let i = 0; i <ca.length; i++) {
		let c = ca[i]; //요소에 접근하여 c변수에 대입
		while (c.charAt(0) == ' ') { //요소의 첫번재가 공백이라면 
			c = c.substring(1); //첫번째 공백을 없애기
		}
		//c 변수에는 'myName=홍길동', 'myAge=20';
		
		//요소의 값 중 매개변수로 넘어온 값의 처음 문자열이 같다면
		//c -> myName=홍길동
		//name -> myName=
		//c.indexOf(name) -> c 요소에 myName= 포함되어 있다면 index값 반환
		if (c.indexOf(name) == 0) {
			//name -> myName= > 크기
			//c -> myName=홍길동 => 크키
			//substring 메서드를 통해 결괏값 '홍길동'
			return c.substring(name.length, c.length);
		}
	}
	return "";
}

▼결과확인