Search

Cookie

Cookie

1. ์ฟ ํ‚ค(Cookie)๋ž€?

ํ•ญ๋ชฉ
์„ค๋ช…
์ฟ ํ‚ค(Cookie)
ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ
์—ญํ• 
์‚ฌ์šฉ์ž์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ธก์— ์ €์žฅ
์ €์žฅ ์œ„์น˜
๋ธŒ๋ผ์šฐ์ € (ํด๋ผ์ด์–ธํŠธ ์ธก)
์˜ˆ์‹œ
๋กœ๊ทธ์ธ ์œ ์ง€, ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ, ๋ฐฉ๋ฌธ ํšŸ์ˆ˜ ๋“ฑ

2. ์„ธ์…˜ vs ์ฟ ํ‚ค ๋น„๊ต

ํ•ญ๋ชฉ
์„ธ์…˜
์ฟ ํ‚ค
์ €์žฅ ์œ„์น˜
์„œ๋ฒ„
ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)
๋ณด์•ˆ์„ฑ
๋†’์Œ (์„œ๋ฒ„์—๋งŒ ์ €์žฅ)
๋‚ฎ์Œ (ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋จ)
๋ฐ์ดํ„ฐ ์œ ์ง€
์„œ๋ฒ„๊ฐ€ ์œ ์ง€ํ•ด์•ผ ํ•จ
๋ธŒ๋ผ์šฐ์ €์— ๋‚จ์•„ ์žˆ์Œ
์šฉ๋Ÿ‰ ์ œํ•œ
์ œํ•œ ์—†์Œ (DB ๊ธฐ์ค€)
์•ฝ 4KB

3. Django์—์„œ ์ฟ ํ‚ค ์‚ฌ์šฉ

์ฟ ํ‚ค ์„ค์ • (Response ๊ฐ์ฒด ์‚ฌ์šฉ)

def set_cookie_view(request): response = HttpResponse("์ฟ ํ‚ค๊ฐ€ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.") response.set_cookie('username', 'hong', max_age=60*60) # 1์‹œ๊ฐ„ ์œ ์ง€ return response
Python
๋ณต์‚ฌ
โ€ข
key: ์ฟ ํ‚ค ์ด๋ฆ„
โ€ข
value: ์ €์žฅํ•  ๊ฐ’ (๋ฌธ์ž์—ด)
โ€ข
max_age: ์œ ํšจ์‹œ๊ฐ„ (์ดˆ)
โ€ข
httponly: JavaScript ์ ‘๊ทผ ์ฐจ๋‹จ ์—ฌ๋ถ€ (๋ณด์•ˆ ๊ฐ•ํ™”)

์ฟ ํ‚ค ์ฝ๊ธฐ

def get_cookie_view(request): username = request.COOKIES.get('username', '์ต๋ช…') return HttpResponse(f'Hello {username}')
Python
๋ณต์‚ฌ

์ฟ ํ‚ค ์‚ญ์ œ

def delete_cookie_view(request): response = HttpResponse("์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.") response.delete_cookie('username') return response
Python
๋ณต์‚ฌ

4. ์ฟ ํ‚ค ์‹ค์Šต ์˜ˆ์ œ

๋ฐฉ๋ฌธ ํšŸ์ˆ˜ ์ €์žฅ ์˜ˆ์ œ

def visit_count_view(request): count = int(request.COOKIES.get('count', 0)) + 1 response = HttpResponse(f'๋‹น์‹ ์€ ์ด ํŽ˜์ด์ง€๋ฅผ {count}๋ฒˆ ๋ฐฉ๋ฌธํ–ˆ์Šต๋‹ˆ๋‹ค.') response.set_cookie('count', count, max_age=3600) return response
Python
๋ณต์‚ฌ

5. ๊ธฐํƒ€ ์˜ต์…˜

์˜ต์…˜
์„ค๋ช…
max_age
์œ ํšจ ์‹œ๊ฐ„ (์ดˆ ๋‹จ์œ„)
expires
์œ ํšจ ๊ธฐ๊ฐ„ (๋‚ ์งœ ์ง€์ •)
path
์ฟ ํ‚ค๊ฐ€ ์œ ํšจํ•œ URL ๊ฒฝ๋กœ
domain
์ฟ ํ‚ค๊ฐ€ ์œ ํšจํ•œ ๋„๋ฉ”์ธ
secure
HTTPS ์š”์ฒญ์—์„œ๋งŒ ์ „์†ก
httponly
JS์—์„œ ์ ‘๊ทผ ๊ธˆ์ง€ (๋ณด์•ˆ ๊ฐ•ํ™”)

6. ์ฟ ํ‚ค ๊ด€๋ จ ์ฃผ์˜์‚ฌํ•ญ

โ€ข
์ฟ ํ‚ค๋Š” ๋ฌธ์ž์—ด๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ
โ€ข
๊ฐœ์ธ์ •๋ณด/๋น„๋ฐ€๋ฒˆํ˜ธ ์ ˆ๋Œ€ ์ €์žฅํ•˜์ง€ ๋ง ๊ฒƒ
โ€ข
ํด๋ผ์ด์–ธํŠธ์—์„œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Œ
โ€ข
์žฅ๊ธฐ ์ €์žฅ๊ฐ’ ํ•„์š” ์‹œ ์‚ฌ์šฉ (์˜ˆ: ์ž๋™ ๋กœ๊ทธ์ธ ์ฒดํฌ, ๋ฐฉ๋ฌธ ๋กœ๊ทธ)

7. ์‹ค์Šต ๊ณผ์ œ

์‹ค์Šต๋ช…
๋ชฉํ‘œ
์ฟ ํ‚ค์— ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ €์žฅ
์ž…๋ ฅ๊ฐ’ ๋ฐ›์•„ ์ฟ ํ‚ค ์ €์žฅ ๋ฐ ํ™˜์˜ ๋ฉ”์‹œ์ง€
๋ฐฉ๋ฌธ ํšŸ์ˆ˜ ์นด์šดํŠธ
๋ฐฉ๋ฌธ ์‹œ ๋งˆ๋‹ค ์ˆซ์ž ์ฆ๊ฐ€
์ž๋™ ๋กœ๊ทธ์ธ
remember_me ์ฟ ํ‚ค ํ™œ์šฉ (๋ณด์•ˆ ์ฃผ์˜ ํฌํ•จ)
์ฟ ํ‚ค ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
๋กœ๊ทธ์•„์›ƒ ์‹œ ์ฟ ํ‚ค ์‚ญ์ œ ์‹ค์Šต

8. ์ •๋ฆฌ ์š”์•ฝ

๊ธฐ๋Šฅ
์ฝ”๋“œ ์˜ˆ์‹œ
์ฟ ํ‚ค ์„ค์ •
response.set_cookie('key', 'value', max_age=3600)
์ฟ ํ‚ค ์กฐํšŒ
request.COOKIES.get('key', 'default')
์ฟ ํ‚ค ์‚ญ์ œ
response.delete_cookie('key')