관리 메뉴

nkdk의 세상

JS :: 쿠키 본문

My Programing/HTML and JavaScript

JS :: 쿠키

nkdk 2008. 6. 16. 10:32

쿠키(cookie)

쿠키는 사용자측에 저장된 텍스트파일정보를 의미합니다. 사용자가 웹사이트(웹서버)에 접속하면 그 정보를 사용자측에 보관하기 위해서 쿠키는 사용됩니다. 예를 들면, 쇼핑몰에서 사용자가 물건을 구매했을 경우 사용자측에 그 정보를 저장합니다. 사용자가 다른 물건을 구매하기 위해서 추가로 물건을 구매했을 경우 그 정보가 계속 유지되어 나타납니다.
쿠키를 이용하여 일정기간 동안 정보를 보관하거나 삭제를 할 수 있습니다. 윈98의 경우 window\cookie폴더에, 윈xp의 경우 Document and Settings폴더안에 사용자ID폴더가 있습니다. 해당 사용자폴더 안에 cookie폴더가 있고 그 안에 쿠키정보가 있습니다. 사용자가 임의로 쿠키정보를 삭제하면 기존에 방문했던 사이트의 쿠키정보가 사라지게 됩니다.

쿠키의 구조

쿠키정보값은 value에 저정되어 있기 때문에 'name=value'속성은 꼭 있어야 합니다. 그 외의 다른 속성은 필요에 따라 생략될 수 있습니다. value값은 세미콜론(;), 콤마(,)등의 기호를 포함할 수 없습니다.

|형식| name=value; expires=date; path=path; domain=domain; secure

|설명|
   name=value : 생략이 불가능하며 식별이름과 식별값을 설정합니다.
   expires=date : 생략이 가능하며 쿠키의 유효기간을 설정합니다. 쿠키의 유효기간이 지나면 자동으로 쿠키정보가 사라집니다.
   path=path : 생략이 가능하며 쿠키의 url경로를 설정합니다.
   domain=domain : 생략이 가능하며 쿠키와 일치하는 url경로의 도메인 부분을 설정합니다.
   secure : 생략이 가능하며 보안유무를 true나 false로 설정합니다.

document.cookie

cookie속성으로 쿠키정보를 읽어오면 'name=value;'형식으로 연속되어 있고 중간에 공백이 있습니다.

|형식| name=value; name=value; name=value; .....

문자열인 경우에는 ISO-Latin-1문자셋(예:2C%%3F)으로 되어있습니다.

  • escape() : ISO-Latin-1문자셋을 아스키값으로 반환합니다.
  • unescape() : 아스키값을 ISO-Latin-1문자셋으로 반환합니다.

  • arguments : 입력된 매개변수들을 배열형태로 저장합니다.

<html>
<script lanaguage="JavaSacript">
<!--

function getCookieval (offset) {  // 해당네임의 밸류값반환
var endstr = document.cookie.indexOf(";", offset);  // 해당네임의 끝을 확인

if (endstr == -1)  // [;]이 없다면 해당쿠키의 끝으로 파악, 자동으로 설정
  endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));  // 해당밸류값을 iso-Latin문자셋으로
}

function getCookie (name) {  // 입력한 네임의 밸류값여부를 확인합니다.
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;

while (i<clen) {
  var j = i + alen;
  if (document.cookie.substring(i, j) == arg)
   return getCookieval(j);

  i = document.cookie.indexOf(" ", i) + 1;
  if (i == 0)
   break;
}

return null;
}

function setCookie (name, value) {  // 쿠키정보를 저장
var argv = setCookie.arguments;  // 입력된 매개변수를 배열형태로 저장
var argc = setCookie.arguments.length;

var expires = (2 < argc) ? argv[2] : null;
var path = (3 < argc) ? argv[3] : null;
var domain = (4 < argc) ? argv[4] : null;
var secure = (5 < argc) ? argv[5] : false;

info_cookie = name + "=" + escape(value)
  + ((expires == null) ? "" : ("; expires=" + expires.toGMTString()))
  + ((path == null) ? "" : ("; path=" + path))
  + ((domain == null) ? "" : ("; domain=" + domain))
  + ((secure == true) ? "; secure" : "");

document.cookie = info_cookie;  // 쿠키형태로 저장
return info_cookie;
}

var myday = new Date();
var myvalue = "shin1";
var get_value;
cookie_day = myday.toGMTString();

document.write("[1] 쿠키생성날짜 : ", cookie_day, "<br>");
myday.setTime(myday.getTime() + (30*24*60*60*1000)); // 생성일로부터 30일이후로 시간설정

document.write("[2] 설정한 쿠키내용 : ");
dsp_cookie = setCookie("mycookie", myvalue, myday, "/", null, false);  // 쿠키설정
document.write(dsp_cookie, "<br>");

document.write("[3] 저장된 쿠키들 : ", document.cookie, "<br>");  // 현재 사용중인 쿠키보기

get_value = getCookie("mycookie");
document.write("[4] 알아낸 쿠키 value값 : ", get_value);

// -->
</script>

<body>
</body>
</html>