์ฟ ํค๋
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ , HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌํด์ฃผ๋ ์ญํ
- HTTP์์๋ Set-Cookie๋ก ํํ๋๋ฉฐ ์๋ตํค๋์์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค๋ฅผ ์ ๋ฌ
๋ณด์
Secure
Secure์ ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅ
HttpOnly
XXS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ทผ ๋ถ๊ฐ(document.cookie)ํ๊ฒ ๋จ
HTTP ์ ์ก์๋ง ์ฌ์ฉ๊ฐ๋ฅ
SameSite
XSRF ๊ณต๊ฒฉ ๋ฐฉ์งํ๋ฉฐ, ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์ฟ ํค ์ ์ก
- samesite=strict : ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ ์ธ๋ถ์์ ์์ฒญ์ ๋ณด๋ผ ๋, ์ด ์ต์ ์ด ์๋ ์ฟ ํค๋ ์ ๋๋ก ์ ์ก์ด ์๋จ
- samsite-lax
- "์์ ํ" HTTP๋ฉ์๋์ธ ๊ฒฝ์ฐ(ex: get๋ฐฉ์, post๋ฐฉ์ X)
- ์ต์์ ๋ ๋ฒจ ํ์์์ ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ(๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์์ url์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ)
- samesite-none : ์ธ๋ถ์ ์ฟ ํค๋ฅผ ์ ์กํ๊ฒ ๋ค.(๋ณด์ ์ปจํ ์คํธ๊ฐ ํ์ํจ)
ํฌ๋กฌ ๋ธ์์ฐ์ ๋ ํด๋น ์ฟ ํค๋ ๋ฐ๋์ Secure๊ฐ ์ค์ ๋ ์ฟ ํค์ฌ์ผํจ
์์ฑ
Expires
๋ง๋ฃ์ผ์ด ๋๋ฉด ์ฟ ํค๋ฅผ ์ญ์ ํจ
max-age
์ฟ ํค์ ์ต๋ ์๊ฐ์ ๋ํ๋
Domain
๋ช
์ํ ๋๋ฉ์ธ์ ๋ํ๋
path
์ด ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค๊ฐ ์ ๊ทผ๋จ
์ฟ ํคํจ์
getCookie(name)
// ์ฃผ์ด์ง ์ด๋ฆ์ ์ฟ ํค๋ฅผ ๋ฐํํ๋๋ฐ, // ์กฐ๊ฑด์ ๋ง๋ ์ฟ ํค๊ฐ ์๋ค๋ฉด undefined๋ฅผ ๋ฐํํฉ๋๋ค. function getCookie(name) { let matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; }
setCookie(name,value,options)
function setCookie(name, value, options = {}) { options = { path: '/', // ํ์ํ ๊ฒฝ์ฐ, ์ต์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์๋ ์์ต๋๋ค. ...options }; if (options.expires instanceof Date) { options.expires = options.expires.toUTCString(); } let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value); for (let optionKey in options) { updatedCookie += "; " + optionKey; let optionValue = options[optionKey]; if (optionValue !== true) { updatedCookie += "=" + optionValue; } } document.cookie = updatedCookie; } // Example of use: setCookie('user', 'John', {secure: true, 'max-age': 3600});
deleteCookie(name)
function deleteCookie(name) { setCookie(name, "", { 'max-age': -1 }) }
์ฃผ์ : ๊ฐฑ์ ์ด๋ ์ญ์ ๋ ๋์ผํ ๋๋ฉ์ธ๊ณผ ๊ฒฝ๋ก์์๋ง ํด์ผ ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
ย