Language/JavaScript (WEB)

[JS] ๐Ÿช ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฟ ํ‚ค(Cookie) ๋‹ค๋ฃจ๊ธฐ

์ธํŒŒ_ 2021. 9. 27. 11:42

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-์ฟ ํ‚ค-๋‹ค๋ฃจ๊ธฐ

Cookie๋ž€?

Cookie๋Š” ๋ฐ์ดํ„ฐ์ด๋ฉด์„œ, ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์— ์ž‘์€ ํ…์ŠคํŠธํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

โ€‹์–ด๋–ค ์‚ฌ์ดํŠธ์— ์ ‘๊ทผ์„ ํ•˜๊ณ  'ํ•˜๋ฃจ ๋™์•ˆ ์ด ์ฐฝ์„ ๋ณด์ง€ ์•Š๊ธฐ'๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณธ์ ์ด ์žˆ๋Š”๊ฐ€? ์•„๋‹ˆ๋ฉด, ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด ๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ, ์ž๋™ ๋กœ๊ทธ์ธ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋ณธ์  ์žˆ๋Š”๊ฐ€?

์‚ฌ์‹ค์ƒ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‚ด์šฉ์„ ๊ธฐ์–ตํ•  ๊ณต๊ฐ„์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด ์ฟ ํ‚ค์ด๋‹ค. ์ฟ ํ‚ค๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „, ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์€ key : value ๋ฐฉ์‹์ž„์„ ๊ธฐ์–ตํ•ด๋‘์ž.

  • ex) username = ํ™๊ธธ๋™

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•˜๊ฒŒ๋˜๋ฉด, ์ด ํŽ˜์ด์ง€์— ์†ํ•œ ์ฟ ํ‚ค๋“ค์ด ์ถ”๊ฐ€๋กœ ์š”์ฒญ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์œ ์ €์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


๐Ÿ’ก ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ์ฐจ์ด๋Š”?

์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค๋ฐ์ดํ„ฐ๋ฅผ ๋น„์šฐ๊ฑฐ๋‚˜ ๊ธˆ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ์œ ์ง€๊ฐ€ ๋œ๋‹ค.

์ด์™€ ๋‹ฌ๋ฆฌ ์„ธ์…˜ ์ €์žฅ์†Œ์˜ ๊ฒฝ์šฐ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ ‘์†ํ•ด ์„ธ์…˜์ด ๋ฐœ์ƒํ•˜๊ณ  ์ง€์ •๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ๋„ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค๋Š” ์ ์ด ์ฐจ์ด์ ์ด๋‹ค.

 

[WEB] ๐ŸŒ ์ฟ ํ‚ค / ์„ธ์…˜ ์ •๋ฆฌ

๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless) HTTP ํ”„๋กœํ† ์ฝœ์—๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless)์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์˜ ์ž์›์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋งˆ๋‹ค ์—ฐ๊ฒฐ

inpa.tistory.com


๐Ÿ’ก ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฟ ํ‚ค ํ™•์ธํ•˜๋Š” ๋ฒ•

โ€‹ํฌ๋กฌ์—์„œ ์ฟ ํ‚ค ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐœ๋ฐœ์ž๋„๊ตฌ(F12) ์—์„œ Application ํƒญ Cookies ์—์„œ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-์ฟ ํ‚ค-๋‹ค๋ฃจ๊ธฐ


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ Cookie ๋‹ค๋ฃจ๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” document.cookie ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ create, delete, read ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ Cookie


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฟ ํ‚ค ๋ฌธ๋ฒ•

 

read

document.cookie๋Š” name=value ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ , ๊ฐ ์Œ์€ ;๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์ด๋•Œ, ์Œ ํ•˜๋‚˜๋Š” ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋œ ์ฟ ํ‚ค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ;์„ ๊ธฐ์ค€์œผ๋กœ document.cookie์˜ ๊ฐ’์„ ๋ถ„๋ฆฌํ•˜๋ฉด ์›ํ•˜๋Š” ์ฟ ํ‚ค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

var x = document.cookie; // cookie1=value1; cookie2=value2;...

โ€‹

write

// Name์ด user๊ณ , Value๊ฐ€ John์ธ ์ฟ ํ‚ค ์ถ”๊ฐ€
// ๊ทธ๋ฆฌ๊ณ  ์†์„ฑ๊ฐ’์œผ๋กœ path์™€ expires๋ฅผ ์„ค์ •ํ•ด์„œ ์ถ”๊ฐ€
// ์ด ์†์„ฑ๊ฐ’์€ ์ฟ ํ‚ค ์ŠคํŠธ๋ง์— ์ €์žฅ๋˜์ง€๋Š” ์•Š๊ณ  ์†์„ฑ์ •๋ณด์— ์ €์žฅ๋œ๋‹ค.
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT"

 

create

// document.cookie = "์ฟ ํ‚ค์ด๋ฆ„=์ฟ ํ‚ค๊ฐ’"
document.cookie = "username = ํ™๊ธธ๋™";


// ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๋„ฃ์–ด์„œ ์ฟ ํ‚ค๊ฐ€ ์ž๋™ ๋งŒ๋ฃŒ ๋˜๋„๋ก ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.(UTC time์„ ์ด์šฉ)
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC";


// ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฟ ํ‚ค๊ฐ€ ์–ด๋”” ๋ธŒ๋ผ์šฐ์ €์— ์†ํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

 

change

document.cookie= ๋Š” getter์™€ setter๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

setter๋ฅผ ์ˆ˜ํ–‰ํ• ๋•Œ ๋ชจ๋“  ์ฟ ํ‚ค๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ , ๋ช…์‹œ๋œ ์ฟ ํ‚ค์ธ user์˜ ๊ฐ’๋งŒ ๊ฐฑ์‹ ํ•œ๋‹ค.

โ€‹

์ฟ ํ‚ค์˜ ์ด๋ฆ„๊ณผ ๊ฐ’์—” ํŠน๋ณ„ํ•œ ์ œ์•ฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ธ€์ž๊ฐ€ ํ—ˆ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ ํ˜•์‹์˜ ์œ ํšจ์„ฑ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๋‚ด์žฅ ํ•จ์ˆ˜ encodeURIComponent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ด ์ค˜์•ผ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

// Name์ด user๊ณ , Value๊ฐ€ John์ธ ์ฟ ํ‚ค ์ถ”๊ฐ€
// document.cookie = ํ–ˆ๋‹ค๊ณ  ์ดˆ๊ธฐํ™”๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, setter์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
// ๊ทธ๋ž˜์„œ = "user=John"ํ•˜๋ฉด ์ „์ฒด๊ฐ€ 'user=john'์ด ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ '+= user=john'์ด ์ถ”๊ฐ€๋˜๊ฒŒ ๋œ๋‹ค.
document.cookie = "user=John";

โ€‹

delete

๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ๊ณผ๊ฑฐ๋กœ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค. ๋‹จ, ์ฟ ํ‚ค ์š”์†Œ๋ฅผ ์‚ญ์ œํ• ๋•Œ ๋ฐ˜๋“œ์‹œ path๋ฅผ ๋งž์ถฐ์•ผ ํ•œ๋‹ค.

์‚ญ์ œ๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด, ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ์ฟ ํ‚ค path๋ฅผ ํ•„ํžˆ ํ™•์ธ ํ•ด ๋ณผ๊ฒƒ

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
// max-age ์‚ฌ์šฉ

// 1์‹œ๊ฐ„ ๋’ค์— ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
document.cookie = "max-age=3600";

// ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ 0์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ๋ฐ”๋กœ ์‚ญ์ œํ•จ
document.cookie = "max-age=0";
โ€‹[ ์ฟ ํ‚ค์˜ ํ•œ๊ณ„ ]

์ฟ ํ‚ค์—” ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค.
encodeURIComponent๋กœ ์ธ์ฝ”๋”ฉํ•œ ์ดํ›„์˜ name=value ์Œ์€ 4KB๋ฅผ ๋„˜์„ ์ˆ˜ ์—†๋‹ค. ์ด ์šฉ๋Ÿ‰์„ ๋„˜๋Š” ์ •๋ณด๋Š” ์ฟ ํ‚ค์— ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋„๋ฉ”์ธ ํ•˜๋‚˜๋‹น ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ฟ ํ‚ค์˜ ๊ฐœ์ˆ˜๋Š” 20์—ฌ ๊ฐœ ์ •๋„๋กœ ํ•œ์ •๋˜์–ด ์žˆ๋‹ค. ๊ฐœ์ˆ˜๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค.

์ฟ ํ‚ค ํŒŒ๋ผ๋ฏธํ„ฐ

 

โ‘  Name ์†์„ฑ๊ณผ Value ์†์„ฑ

  • Name๊ณผ Value ์†์„ฑ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฝ๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Name๊ณผ Value ์†์„ฑ์„ ๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
// Name์ด user๊ณ , Value๊ฐ€ John์ธ ์ฟ ํ‚ค ์ถ”๊ฐ€
document.cookie = "user=John"

 

โ‘ก Expires ์†์„ฑ

  • Expires ์†์„ฑ์€ ์ฟ ํ‚ค์˜ ํŒŒ๊ธฐ ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค.
  • Expires ์†์„ฑ์—๋Š” GMT ํ˜•์‹์ด๋‚˜ UTC ํ˜•์‹์œผ๋กœ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
  • ํŒŒ๊ธฐ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT"

 

โ‘ข max-age ์†์„ฑ

  • expires ์˜ต์…˜์˜ ๋Œ€์•ˆ์œผ๋กœ, ์ฟ ํ‚ค ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ํ˜„์žฌ๋ถ€ํ„ฐ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๋งŒ๋ฃŒ์ผ์‹œ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์ดˆ๋กœ ํ™˜์‚ฐํ•œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.
// 1์‹œ๊ฐ„ ๋’ค์— ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
document.cookie = "user=John; max-age=3600";

// ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ 0์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ๋ฐ”๋กœ ์‚ญ์ œํ•จ
document.cookie = "user=John; max-age=0";

โ€‹

โ‘ฃ Secure ์†์„ฑ

  • Secure ์†์„ฑ์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์ฟ ํ‚ค๋Š” SSL์„ ์‚ฌ์šฉํ•ด์„œ๋งŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.
document.cookie = "user=John; Secure"

 

โ‘ค Domain ์†์„ฑ

  • Domain ์†์„ฑ์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋„๋ฉ”์ธ์˜ ๊ฒฝ๋กœ๋กœ ์ž๋™ ์ž…๋ ฅ๋œ๋‹ค.
  • ํŽ˜์ด์ง€ ์š”์ฒญ๊ณผ ๋น„๊ตํ•ด์„œ ๋„๋ฉ”์ธ์˜ ๊ฒฝ๋กœ์™€ Domain ์†์„ฑ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์œผ๋ฏ€๋กœ Domain ์†์„ฑ์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
// naver.com, www.naver.com, blog.naver.com, cafe.naver.com ์„œ๋ธŒ ๋„๋ฉ”์ธ๋„ ๋ชจ๋‘ ํฌํ•จ
document.cookie = "user=John; Domain=.naver.com"

 

โ‘ฅ Path ์†์„ฑ

  • Path ์†์„ฑ์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋„๋ฉ”์ธ์˜ ๊ฒฝ๋กœ๋กœ ์ž๋™ ์ž…๋ ฅ๋œ๋‹ค.
  • Path ์†์„ฑ์€ ์ผ๋ถ€๋Ÿฌ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ ํŠน์ • ๊ฒฝ๋กœ(ํด๋”๋ช…)๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • Path ์†์„ฑ์€ /ํด๋”/ ๋กœ ์„ค์ •๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ Path ์†์„ฑ์ด ์„ค์ •๋˜๋ฉด ํ˜„์žฌ ํด๋” ๋˜๋Š” ํ˜„์žฌ ํด๋”์˜ ํ•˜์œ„์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Path ์†์„ฑ์„ ' / '๋กœ ์„ค์ •ํ•˜๋ฉด ๋„๋ฉ”์ธ ๋‚ด์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฟ ํ‚ค์˜ ๋ฒ”์œ„๋ฅผ ์ข๊ฒŒ ์žก์„ ์ˆ˜๋ก ๋ณด์•ˆ์—๋Š” ์ข‹๋‹ค.)
document.cookie = "user=John; path=/"

 

โ‘ฅ HttpOnly ์†์„ฑ

  • ์„ค์ • ์‹œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฟ ํ‚ค ์กฐ์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
document.cookie = "user=John; httpOnly"

์ฟ ํ‚ค ํ•จ์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋‹ค์Œ์€ ์ฟ ํ‚ค๋™์ž‘์„ ํ•จ์ˆ˜๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ—ฌํผ ํ•จ์ˆ˜๋“ค์ด๋‹ค.

 

@get

// ์ฃผ์–ด์ง„ ์ด๋ฆ„์˜ ์ฟ ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ,
// ์กฐ๊ฑด์— ๋งž๋Š” ์ฟ ํ‚ค๊ฐ€ ์—†๋‹ค๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
function getCookie(name) {
  let matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}

โ€‹

@set

function setCookie(name, value, options = {}) {

  options = {
    path: '/', // ๊ฒฝ๋กœ ์ง€์ •
    ...options // ์•„๊ทœ๋จผํŠธ๋กœ ์˜ต์…˜์„ ๋„˜๊ฒจ์คฌ์„๊ฒฝ์šฐ ์ „๊ฐœ์—ฐ์‚ฐ์ž๋กœ ์ถ”๊ฐ€ ๊ฐฑ์‹ 
  };

  if (options.expires instanceof Date) {
    options.expires = options.expires.toUTCString(); // ์ƒ Date ๊ฐ์ฒด๋ผ๋ฉด ํ˜•์‹์— ๋งž๊ฒŒ ์ธ์ฝ”๋”ฉ
  }

  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; // ์ƒˆ๋กœ ๊ฐฑ์‹ 
}

//์ฟ ํ‚ค ์ƒ์„ฑ
if (!document.cookie) {
   setCookie('expires', date.toUTCString());
   console.log('new Cookie created !');
}

// ์ฟ ํ‚ค ์ถ”๊ฐ€
setCookie('user', 'John', {secure: true, 'max-age': 3600});

โ€‹

@delete

function deleteCookie(name) { // ํ•ด๋‹น ์ฟ ํ‚ค ์š”์†Œ๋งŒ ์‚ญ์ œ
  setCookie(name, "", {
    'max-age': -1
  })
}

โ€‹

@deleteAll

function deleteAllCookies() {
   var cookies = document.cookie.split(";");
   for (var i = 0; i < cookies.length; i++) {
      var cookie = cookies[i];
      var eqPos = cookie.indexOf("=");
      var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
      deleteCookie(name.trim());
   }
   console.log('all cookies deleted !')
}

 

# ์ฐธ๊ณ ์ž๋ฃŒ

https://ko.javascript.info/cookie

https://wickedmagica.tistory.com/m/72?category=727614