๐ก ์ฟ ํค์ ๋ํด์ ์์๋ด ์๋ค !
๐ฆ ์ฟ ํค๋ ๋ฌด์์ธ๊ฐ์?
์ฟ ํค(Cookie)๋ ์น ์๋ฒ์ ํด๋ผ์ด์ธํธ(์ฃผ๋ก ์น ๋ธ๋ผ์ฐ์ ) ๊ฐ์ ์ํธ์์ฉ์ ํ๋ฉด์ ๋ฐ์ํ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๋๋ค. ์ฟ ํค๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๊ณ ์ถ์ ํ๋๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์ฟ ํค์ ๊ตฌ์กฐ (์์)
Set-Cookie : name=value; Expries=Wed, 21 Oct 2021 07:28:00 GMT; Path=/; Domain=example.com
์ฟ ํค์ ์ฉ๋
1. ์ธ์ ๊ด๋ฆฌ : ๋ก๊ทธ์ธ ์ ๋ณด, ์ฅ๋ฐ๊ตฌ๋ ๋ด์ฉ ๋ฑ ์ฌ์ฉ์ ์ธ์
์ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ
2. ์ฌ์ฉ์ ๋ง์ถค ์ค์ : ์ฌ์ฉ์๊ฐ ์ค์ ํ ์น ์ฌ์ดํธ์ ํ๊ฒฝ ์ค์ (์:์ธ์ด,ํ
๋ง ๋ฑ)์ ์ ์ฅ
3. ํธ๋ํน ๋ฐ ๋ถ์ : ์ฌ์ฉ์์ ์น ์ฌ์ดํธ ๋ฐฉ๋ฌธ ํจํด์ ์ถ์ ํ์ฌ ๋ถ์ํ๊ณ ๊ด๊ณ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
์ฟ ํค ์ ์ฅํ๊ณ ๊ฐ์ ธ์ค๊ธฐ
๐ฅ๏ธ ์ฟ ํค ํ ์คํธ(์์ ์ค์ต)
์ ์ฒด์ฝ๋
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>cookieTest.jsp</h1>
<%
//1. ์ฟ ํค๋ค ๊ฐ์ ธ์ค๊ธฐ
Cookie cks[]=request.getCookies();
//2. ์ํ๋ ํค๊ฐ ์ฐพ๊ธฐ
if(cks!=null){
for(int i=0;i<cks.length;i++){
String key=cks[i].getName(); //์ฟ ํค์ ํค๊ฐ ๊ฐ์ ธ์ค๊ธฐ
String value=URLDecoder.decode(cks[i].getValue()); //์ฟ ํค์ value๊ฐ ๊ฐ์ ธ์์ ๋์ฝ๋ฉ
//String value=cks[i].getValue(); //์ฟ ํค์ ๋ฐธ๋ฅ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
out.println("<h2>Key: "+key+" Value: "+value+"</h2>");
}
}
//1. ์ฟ ํค๊ฐ์ฒด ์์ฑ
String name="ํ ๊ธธ๋";
name=URLEncoder.encode(name);
Cookie ck=new Cookie("cname", "honggildong");
//2. ๋์ด์ง์
ck.setMaxAge(60*3);
//3. ์ฌ์ฉ์์๊ฒ ์ฌ๊ธฐ
response.addCookie(ck);
Cookie ck2=new Cookie("cage", "20");
ck2.setMaxAge(60*3);
response.addCookie(ck2);
%>
</body>
</html>
์ถ๋ ฅํ๋ฉด
์ฒซ ์ ์ ์์๋ ํด๋ผ์ด์ธํธ์ JSESSIONID ์ฟ ํค๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด ์ฟ ํค๋ง ์ถ๋ ฅ๋ฉ๋๋ค.
์ดํ ์๋ก์ด ์ฟ ํค๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์กํ๋ฉด, ์๋ก๊ณ ์นจ ์ ํด๋ผ์ด์ธํธ๋ ์์ฑ๋ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ค์ ์๋ฒ์ ์ ์กํ๋ฏ๋ก ๋ชจ๋ ์ฟ ํค๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.

์ฝ๋์ค๋ช 01
<%
// 1. ํด๋ผ์ด์ธํธ์ ์ ์ก๋ ์ฟ ํค๋ค์ ๊ฐ์ ธ์ค๊ธฐ
Cookie cks[] = request.getCookies(); // request ๊ฐ์ฒด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐฐ์ดํํ๋ก ๊ฐ์ ธ์ด
// 2. ํน์ ์ฟ ํค๋ฅผ ์ฐพ๊ณ ๊ทธ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ
if(cks!=null){ // ์ฟ ํค๊ฐ ์กด์ฌํ๋์ง ํ์ธ
for(int i=0;i<cks.length;i++) { // ๋ชจ๋ ์ฟ ํค๋ฅผ ์ํํ๋ฉด์
String key = cks[i].getName(); // ํ์ฌ ์ฟ ํค์ ์ด๋ฆ์ ๊ฐ์ ธ์ด
String value = URLDecoder.decode(cks[i].getValue();) // ํ์ฌ ์ฟ ํค์ ๊ฐ์ URL ๋์ฝ๋ฉํ์ฌ ๊ฐ์ ธ์ด
out.println("<h2>Key:"+key+"/Value:"+value+"</h2>"); // ์ฟ ํค์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ถ๋ ฅ
}
}
%>
[์ถ๋ ฅํ๋ฉด๐ฝ]

์ฟ ํค๋ ์ด๋ฆ๊ณผ ๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค. ์ถ๋ ฅ์ ์์ ๊ฐ์ต๋๋ค.
์ฝ๋์ค๋ช 02
// 1. ์๋ก์ด ์ฟ ํค๊ฐ์ฒด ์์ฑ
String name = "ํ๊ธธ๋";
name = URLEncoder.encode(name, "UTF-8"); // ๊ฐ์ URL ์ธ์ฝ๋ฉ (๊ณต๋ฐฑ ๋ฐ ํน์๋ฌธ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ธ์ฝ๋ฉ), ์ธ์ฝ๋ฉ ๋ฐฉ์์ UTF=8
Check ck = new Cookie("cname",name); // "cname" ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฟ ํค ๊ฐ์ฒด ์์ฑ, ๊ฐ์ ์ธ์ฝ๋ฉ๋ "ํ๊ธธ๋"
// 2. ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ ์ค์
ck.setMaxAge(60*3); // ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ 3๋ถ(180์ด)๋ก ์ค์
// 3. ์์ฑํ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ์ ์ถ๊ฐ
response.addCookie(ck) // response ๊ฐ์ฒด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ฟ ํค ์ ์ก
// ๋ ๋ฒ์งธ ์ฟ ํค๊ฐ์ฒด ์์ฑ ๋ฐ ์ค์
Cookie ck2 = new Cookie("cage","20"); // cage๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฟ ํค ๊ฐ์ฒด ์์ฑ, ๊ฐ์ "20"
ck2.setMaxAge(60*3); // ์ ํจ ๊ธฐ๊ฐ์ 3๋ถ์ผ๋ก ์ค์
response.addCookie(ck2); // ํด๋ผ์ด์ธํธ์ ์ฟ ํค ์ ์ก
๐ฆ URLEncoder.encode()์ ๋ฌด์์ธ๊ฐ์ ?
๋ฌธ์์ด์ application/x-www-form-urlencoded MIME ํ์์ผ๋ก ์ธ์ฝ๋ฉ์ ํ์ฌ์,
URL์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ํน์ ๋ฌธ์์ ๊ณต๋ฐฑ์ ์ธ์ฝ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ ํจ ๊ธฐ๊ฐ ์ค์ : 'setMaxAge()'๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฟ ํค์ ์ ํจ ๊ธฐ๊ฐ์ ์ด ๋จ์๋ก ์ค์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ 3๋ถ(60์ด * 3)์ผ๋ก ์ค์ ํ์ต๋๋ค.
์ฟ ํค ์ถ๊ฐ : 'response.addCookie()' ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ์กํฉ๋๋ค. ๋ ๋ฒ์งธ ์ฟ ํค๋ "cage" ๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ๊ฐ์ "20" ์ด๋ฉฐ, ์ญ์ 3๋ถ ๋์ ์ ํจํฉ๋๋ค.
[์ถ๋ ฅํ๋ฉด๐ฝ]
