๐ค์ฟ ํค(Cookie) : ์๋ฒ(์นํ๋ก๊ทธ๋จ)์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ์ ๋ณด๋ฅผํด๋ผ์ด์ธํธ์ ์ ์ฅํ๋ ๋ฌธ์๊ฐ
์ฟ ํค์ ์ธ์ ์ ๊ฐ ๊ฐ๋ , ๋์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋์ ๋ธ๋ก๊ทธ ์ฐธ๊ณ ๐คฉโฌ๏ธโฌ๏ธ
https://interconnection.tistory.com/74
์ฟ ํค์ ์ธ์ ๊ฐ๋
๋ ธ์ ํ์ด์ง(์๋ ๋ด์ฉ๊ณผ ๋์ผ) ๊ฐ์ ์ฟ ํค์ ์ธ์ ์ ๊ฐ๋ฐ์ ๋ง๊ณ ๋ ์ธํฐ๋ท ์ฌ์ฉ์๋ผ๋ฉด ๋๊ตฌ๋ ๋ง์ด ๋ค์ด๋ณธ ๋จ์ด์ ๋๋ค. ํ์ง๋ง ๊ฐ๋ ์ ๋ํด์๋ ๋ง์ ์ฌ๋๋ค์ด ํท๊ฐ๋ ค ํ๊ธฐ์ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์
interconnection.tistory.com
โญ ์ฟ ํค ์์ฑ โญ
1. ํด๋ผ์ด์ธํธ์๊ฒ ์ฟ ํค๋ฅผ ์ ๋ฌํ์ฌ ์ ์ฅํ๊ณ ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ HTML ๋ฌธ์๋ก ์๋ตํ๋ ์๋ธ๋ฆฟ
=> ์๋ธ๋ฆฟ์์ ์ฟ ํค๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ ์ฟ ํค๋ฅผ ์ ์ฅ
=> ํด๋ผ์ด์ธํธ์๋ ์ ์ ์๋ฒ์ ์ ๋ณด๋ฅผ ์๋ณ์๋ก ํ์ฌ ๋ค์์ ์ฟ ํค ์ ์ฅ
1) Cookie ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ
=> Cookie ๊ฐ์ฒด : ์ฟ ํค ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
=> Cookie(String name, String value) ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ Cookie ๊ฐ์ฒด ์์ฑ
=> name : ์ฟ ํค๋ช
(์ฟ ํค๊ฐ์ ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋ณ์), value : ์ฟ ํค๊ฐ(์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ฌธ์๊ฐ)
Cookie idCookie=new Cookie("id", "abc123");
Cookie countCookie=new Cookie("count", "0");
2) ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋์ด ์ ์ฅ๋ ์ฟ ํค์ ์ ์ง์๊ฐ ๋ณ๊ฒฝ
Cookie.setMaxAge(int expiry) : ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ์๊ฐ(์ด)๋งํผ ์ฟ ํค์ ์ ์ง์๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋
=> Cookie ๊ฐ์ฒด์ ์ ์ง์๊ฐ์ ๋ณ๊ฒฝํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ [-1]๋ก ์ค์
countCookie.setMaxAge(24*60*60);//ํด๋ผ์ด์ธํธ์์ ์ฟ ํค๋ฅผ ํ๋ฃจ๋์ ์ ์ง๋๋๋ก ์ค์
3)ํด๋ผ์ด์ธํธ์๊ฒ Cookie ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ์ฟ ํค๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋๋ก ์ค์
=> Cookie ๊ฐ์ฒด์ ์ ์ง์๊ฐ์ด [-1]๋ก ์ค์ ๋ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ - ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋๋ฉด ์๋ ์๋ฉธ
=> Cookie ๊ฐ์ฒด์ ์ ์ง์๊ฐ์ด [-1]์ด ์๋ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ํ์ผ๋ก ์ ์ฅ - ์ ์ง์๊ฐ ๊ฒฝ๊ณผํ ์๋ ์๋ฉธ
HttpServletResponse.addCookie(Cookie cookie) : ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ Cookie ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋์ด ์ ์ฅ๋๋๋ก ๋ฆฌ์คํฐ์ฆ ๋ฉ์ธ์ง์ ์ ์ฅํ๋ ๋ฉ์๋
response.addCookie(idCookie);
response.addCookie(countCookie);
์ฟ ํค ์์ฑ ์๋ธ๋ฆฟ ์ฝ๋ ์ ์ฒดโฌ๏ธ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/create.itwill")
public class CookieCreateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//Cookie ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ
Cookie idCookie=new Cookie("id", "abc123");
Cookie countCookie=new Cookie("count", "0");
//ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋์ด ์ ์ฅ๋ ์ฟ ํค์ ์ ์ง์๊ฐ ๋ณ๊ฒฝ
countCookie.setMaxAge(24*60*60);//ํด๋ผ์ด์ธํธ์์ ์ฟ ํค๋ฅผ ํ๋ฃจ๋์ ์ ์ง๋๋๋ก ์ค์
//ํด๋ผ์ด์ธํธ์๊ฒ Cookie ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ์ฟ ํค๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋๋ก ์ค์
response.addCookie(idCookie);//๋ธ๋ผ์ฐ์ ์ข
๋ฃ๋๋ฉด ์๋ ์๋ฉธ
response.addCookie(countCookie);//ํ๋ฃจ๊ฐ ์ง๋๋ฉด ์๋ ์๋ฉธ
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค ์์ฑ</h1>");
out.println("<hr>");
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค.</p>");
out.println("<hr>");
out.println("<p><a href='use.itwill'>์ฟ ํค ์ฌ์ฉ</p>");
out.println("</body>");
out.println("</html>");
}
}
โถ๏ธ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋๊ณ , ์ฟ ํค ์ฌ์ฉ ํ์ด์ง๋ก ๋์ด๊ฐ ์ ์๋ ํ๊ทธ๊ฐ ์์.
โญ ์ฟ ํค ์ฌ์ฉ โญ
2. ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ์ HTML ๋ฌธ์๋ก ์๋ตํ๋ ์๋ธ๋ฆฟ
=> ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ์ํ์ฌ ์๋ธ๋ฆฟ์ ์์ฒญํ๋ฉด ์๋ฒ ์ ๋ณด๋ก ์ ์ฅ๋ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฆฌํ์คํธ ๋ฉ์ธ์ง๋ก ์ ๊ณต
1)ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐํ๋ฐ์ ์ ์ฅ
HttpServletRequest.getCookies() : ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ชจ๋ ์ฟ ํค๋ฅผ Cookie ๊ฐ์ฒด ๋ฐฐ์ด๋ก ๋ฐํํ๋ ๋ฉ์๋
Cookie[] cookies=request.getCookies();
2)์๋ตํ HTML ๋ฌธ์ ์์์ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ฒ์ฆ
โช๏ธ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
์ ์ฅ๋ ์ฟ ํค๊ฐ์ด ์์ ์๋ค๋ฉด, '๋ค ์์ ์ฟ ํค ์๋ค.'๋ผ๋ ๋ฉํธ๋ฅผ ์ถ๋ ฅํด์ฃผ๊ธฐ
if(cookies==null) {
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค.</p>");
}
โช๏ธ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
- ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ ๋ช ๋ น์ else ๋ฌธ์ ์์ฑ
- Cookie ๊ฐ์ฒด ๋ฐฐ์ด์ ์์๊ฐ(Cookie ๊ฐ์ฒด)๋ฅผ ์ฐจ๋ก๋๋ก ์ ๊ณต๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐ๋ณต๋ฌธ(for๋ฌธ)์ฌ์ฉ
- ๋ฐ๋ณต๋ฌธ ์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฟ ํค ๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ฒด๋ช ๊ณผ ID, COUNT ๋น๊ต, TRUE๋ฉด ID,COUNT์ ๊ฐ ์ ์ฅ
-์ ์ฅ๋ ์ฟ ํค๊ฐ ์ถ๋ ฅ ํ, ์ฟ ํค๊ฐ์ฒด ์๋ก ์์ฑ(์๋ก ์์ฑ๋๋ฉด์ ๊ธฐ์กด ์ฟ ํค๋ ์ญ์ ๋๊ณ ์๋ก ์์ฑ๋ ์ฟ ํค๊ฐ ์ ์ฅ๋จ)
else {
String id="";
String count="";
for(Cookie cookie : cookies) {
Cookie.getName() : Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๋ช
์ ๋ฐํํ๋ ๋ฉ์๋
if(cookie.getName().equals("id")) {
Cookie.getValue() : Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
id=cookie.getValue();
} else if(cookie.getName().equals("count")) {
count=cookie.getValue();
}
}
//์ฟ ํค๊ฐ์ HTML ๋ฌธ์์ ํฌํจํ์ฌ ์ถ๋ ฅ ์ฒ๋ฆฌ
if(!id.equals("")) {//์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
out.println("<p>์์ด๋ = "+id+"</p>");
}
if(!count.equals("")) {//์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
int cnt=Integer.parseInt(count)+1;
out.println("<p>์๋ธ๋ฆฟ ์์ฒญ ํ์ = "+cnt+"</p>");
//Cookie ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ์ฌ ์ ์ฅ
// => ๋์ผํ ์ฟ ํค๋ช
์ ์ฟ ํค๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ฟ ํค๋ฅผ
//์ญ์ ํ๊ณ ์๋ก์ด ์ฟ ํค๋ก ์ ์ฅ - ์ฟ ํค ๋ณ๊ฒฝ
//Cookie cookie=new Cookie("count", String.valueOf(cnt));
Cookie cookie=new Cookie("count", cnt+"");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
}
}
์ฟ ํค ์ฌ์ฉ ์๋ธ๋ฆฟ ์ฝ๋ ์ ์ฒดโฌ๏ธ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ์ HTML ๋ฌธ์๋ก ์๋ตํ๋ ์๋ธ๋ฆฟ
@WebServlet("/use.itwill")
public class CookieUseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐํ๋ฐ์ ์ ์ฅ
Cookie[] cookies=request.getCookies();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค ์ฌ์ฉ</h1>");
out.println("<hr>");
if(cookies==null) {//ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค.</p>");
} else {
String id="";
String count="";
//Cookie ๊ฐ์ฒด ๋ฐฐ์ด์ ์์๊ฐ(Cookie ๊ฐ์ฒด)๋ฅผ ์ฐจ๋ก๋๋ก ์ ๊ณต๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐ๋ณต๋ฌธ
for(Cookie cookie : cookies) {
//Cookie.getName() : Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๋ช
์ ๋ฐํํ๋ ๋ฉ์๋
if(cookie.getName().equals("id")) {
//Cookie.getValue() : Cookie ๊ฐ์ฒด์ ์ ์ฅ๋ ์ฟ ํค๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
id=cookie.getValue();
} else if(cookie.getName().equals("count")) {
count=cookie.getValue();
}
}
//์ฟ ํค๊ฐ์ HTML ๋ฌธ์์ ํฌํจํ์ฌ ์ถ๋ ฅ ์ฒ๋ฆฌ
if(!id.equals("")) {//์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
out.println("<p>์์ด๋ = "+id+"</p>");
}
if(!count.equals("")) {//์ฟ ํค๊ฐ์ด ์๋ ๊ฒฝ์ฐ
int cnt=Integer.parseInt(count)+1;
out.println("<p>์๋ธ๋ฆฟ ์์ฒญ ํ์ = "+cnt+"</p>");
//Cookie ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ์ฌ ์ ์ฅ
// => ๋์ผํ ์ฟ ํค๋ช
์ ์ฟ ํค๊ฐ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ฟ ํค๋ฅผ
//์ญ์ ํ๊ณ ์๋ก์ด ์ฟ ํค๋ก ์ ์ฅ - ์ฟ ํค ๋ณ๊ฒฝ
//Cookie cookie=new Cookie("count", String.valueOf(cnt));
Cookie cookie=new Cookie("count", cnt+"");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
}
}
out.println("<hr>");
out.println("<p><a href='create.itwill'>์ฟ ํค ์์ฑ</p>");
out.println("<p><a href='remove.itwill'>์ฟ ํค ์ญ์ </p>");
out.println("</body>");
out.println("</html>");
}
}
โถ๏ธ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋๊ณ , ์ฟ ํค ์์ฑ์ ๋๋ฅผ ๋๋ง๋ค ์๋ธ๋ฆฟ ์์ฒญ ํ์๊ฐ ๋์ด๋จ.
โญ ์ฟ ํค ์ญ์ โญ
3. ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ์ฟ ํค๋ฅผ ์ญ์ ํ์ฌ HTML ๋ฌธ์๋ก ์๋ตํ๋ ์๋ธ๋ฆฟ
์ฟ ํค ์ญ์ ์๋ธ๋ฆฟ ์ฝ๋ ์ ์ฒดโฌ๏ธ
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/remove.itwill")
public class CookieRemoveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฐ์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ฐํ๋ฐ์ ์ ์ฅ
Cookie[] cookies=request.getCookies();
if(cookies != null) {//ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์ฟ ํค๊ฐ ์๋ ๊ฒฝ์ฐ
//Cookie ๊ฐ์ฒด ๋ฐฐ์ด์ ์์๊ฐ(Cookie ๊ฐ์ฒด)๋ฅผ ์ฐจ๋ก๋๋ก ์ ๊ณต๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐ๋ณต๋ฌธ
for(Cookie cookie : cookies) {
//ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์ฟ ํค์ ์ ์ง์๊ฐ์ [0]์ผ๋ก ๋ณ๊ฒฝํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ
// => ์ ์ง์๊ฐ์ด ์ง๋ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์์ ์๋ ์๋ฉธ - ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋ ์ฟ ํค
cookie.setMaxAge(0);
response.addCookie(cookie);//๊ธฐ์กด ์ฟ ํค๋ฅผ ์ญ์ ํ๊ณ ์๋ก์ด ์ฟ ํค๋ก ๋ฎ์ด ์์ฐ๊ธฐ
}
}
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ฟ ํค ์ญ์ </h1>");
out.println("<hr>");
out.println("<p>๋ค ์์ ์ฟ ํค ์๋ค.</p>");
out.println("<hr>");
out.println("<p><a href='use.itwill'>์ฟ ํค ์ฌ์ฉ</p>");
out.println("</body>");
out.println("</html>");
}
}
โถ๏ธ์ฟ ํค ์ฌ์ฉ ํ์ด์ง์์ [์ฟ ํค ์ญ์ ]๋ฅผ ๋๋ฅด๋ฉด ์๋ ํ์ด์ง(์ ์ฝ๋)๋ก ์ด๋ํจ.