Cookie

λͺ©μ 

HTTP Cookie λŠ” μ„œλ²„κ°€ μ‚¬μš©μžμ˜ μ›Ή λΈŒλΌμš°μ €μ— μ „μ†‘ν•˜λŠ” μž‘μ€ 데이터 쑰각이닀.

μ΄λŠ” λŒ€κ°œ μ„Έ κ°€μ§€ λͺ©μ μ„ μœ„ν•΄ μ‚¬μš©λœλ‹€.

  • μ„Έμ…˜ 관리 (Session Management)
    • μ„œλ²„μ— μ €μž₯ν•  둜그인 정보, 데이터셋 λ“±κ³Ό 같은 정보관리
  • κ°œμΈν™” (Personalization)
    • μ‚¬μš©μžμ˜ μ„ ν˜Έ ν˜Ήμ€ μ„ΈνŒ… κ°’
  • νŠΈλž˜ν‚Ή (Tracking)
    • μ‚¬μš©μžμ˜ 행동을 κΈ°λ‘ν•˜κ³  λΆ„μ„ν•˜λŠ” κΈ°μ€€ μš©λ„

κ³Όκ±°μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯ν•˜λŠ” μœ μΌν•œ μˆ˜λ‹¨μ΄μ˜€μœΌλ‚˜ HTTP μš”μ²­μ‹œ μ˜€λ²„ν—€λ“œκ°€ 컀질 μš°λ €κ°€ 있기 λ•Œλ¬Έμ— Modern Storage APIs 의 μ’…λ₯˜μΈ Web Storage API(localStorage sessionStorage) λ₯Ό μ‚¬μš©ν•˜λŠ”κ²ƒμ„ ꢌμž₯ν•œλ‹€.

νŠΉμ§•

  • ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯λ˜λŠ” 킀와 값이 λ“€μ–΄μžˆλŠ” μž‘μ€ 데이터 파일 (ν•˜λ‚˜λ‹Ή 4KB μ΄ν•˜)
  • 이름, κ°’, λ§Œλ£Œλ‚ μ§œ (μΏ ν‚€μ˜ μ €μž₯μ‹œκ°„), κ²½λ‘œμ •λ³΄ 등이 ν¬ν•¨λ˜μ–΄ 있으며 λ°˜λ“œμ‹œ μžλ£Œν˜•μ€ String 으둜 κ΅¬μ„±λœλ‹€.
  • μ‚¬μš©μžκ°€ μž„μ˜λ‘œ μΏ ν‚€ 데이터λ₯Ό μ €μž₯, μˆ˜μ •, μ‚­μ œν•  수 μžˆλ‹€.
  • μ‚¬μš©μžκ°€ λΈŒλΌμš°μ € μ„€μ •μœΌλ‘œ μΏ ν‚€μ˜ μ‚¬μš©μœ λ¬΄λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

HTTP μ „μ†‘μ‹œμ— μš”μ²­ 헀더에 μΏ ν‚€ 값이 λ“€μ–΄ μžˆμ–΄ μΏ ν‚€μ˜ μžλ£ŒλŸ‰ (데이터 μ‚¬μ΄μ¦ˆ) 이 큰 경우
μ˜€λ²„ν—€λ“œλ‘œ μΈν•œ μ›Ήμ„œλ²„ μ—λŸ¬κ°€ λ°œμƒ ν•  수 μžˆλ‹€.

생성

function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  var expires = 'expires=' + d.toUTCString();
  document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';
}

쑰회

Pollyfill

function getCookie(name) {
    if (typeof $.cookie === 'function') {
        return $.cookie(name);
    } else {
        var cookie = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
        return (cookie ? cookie[2] : '');
    }
}
getCookie('userID');

λ³€κ²½

jQuery Library μ‚¬μš©μ‹œ

$.cookie('userID', '였리', { domain : '.sudals.com', path: '/'});

μ‚­μ œ

jQuery Library μ‚¬μš©μ‹œ

$.cookie('userID', null, { domain : '.sudals.com', path: '/'});

μ˜΅μ…˜

HttpOnly

HttpOnly μ˜΅μ…˜ μ‚¬μš©μ‹œμ— XSS (Cross-Site Scripting) λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

이 μ˜΅μ…˜μ„ μ„€μ •ν•˜λ©΄ Document.cookie API 에 μ ‘κ·Όν•  수 μ—†μœΌλ©° μ„œλ²„μ— μ „μ†‘λ˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

μ„Έμ…˜ μΏ ν‚€ (Session Cookie) λŠ” Javascript μ—μ„œ μ‚¬μš©ν•  ν•„μš”μ„±μ΄ μ—†κΈ° λ•Œλ¬Έμ— HttpOnly ν”Œλž˜κ·Έκ°€ μ„€μ •λ˜λŠ”κ²ƒμ΄ λ°”λžŒμ§ν•˜λ‹€.