์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ํค์ ๊ฐ ํํ๋ก ์ ์ฅ๋์ด ์๋ ์์ ๋ฐ์ดํฐ ํ์ผ์ด๋ค. ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ํ๊ฐ ๊ณ์ ์ ์ง๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ์ํด ์ฐ์ธ๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ปดํจํฐ์ ํน์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ Connectionless(๋น์ฐ๊ฒฐ์ฑ)๊ณผ Stateless(๋ฌด์ํ)์ด๋ค.
Connectionless(๋น์ฐ๊ฒฐ์ฑ)
: HTTP๋ TCP ์ฐ๊ฒฐ์ ๋งบ๊ณ ์์ฒญ(Request)์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ์๋ต(Response)์ ๋ณด๋ด๊ณ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ค.
Stateless(๋ฌด์ํ)
: HTTP๋ ์ํ๋ฅผ ๋ฐ๋ก ์ ์ฅํ์ง ์๋๋ค. ์ฆ, ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ์๊ฐ ๋ชจ๋ ์ํ ์ ๋ณด๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฒซ ๋ฒ์งธ ํต์ ๋ ๋ณด๋ธ ์ ๋ณด๋ฅผ ๋ ๋ฒ์งธ ํต์ ๋ ์ ์ ์๋ค.
์ฟ ํค๋ ์ ๋ขฐ๋๊ฐ ๋จ์ด์ง๋ค๋ ๋จ์ ์ด ์๋ค.
์๋ ์ฟ ํค๋ฅผ ํฌ๋กฌ์์ ํ์ธํ ๊ฒ์ด๋ค.
Cookie๋ฅผ ์ด์ฉํด์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ, ์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋ ์ฒ๋ฆฌ, ๋ฐฉ๋ฌธ ํ์ธ ๋ฑ์ ๋ง๋ค ์ ์๋ค.
๊ทธ ์ค, ๋๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค.
package pack;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
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("/CookieTest")
public class CookieTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ๋ก๊ทธ์ธ์ผ๋ก ์ฟ ํค ์ฐ์ต
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
// ์ฟ ํค๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ์ธ ํ๋ฉด ์ถ๋ ฅ
String id = null;
String pwd = null;
try {
Cookie[] cookies = request.getCookies(); // ํด๋ผ์ด์ธํธ ์ฟ ํค๋ฅผ ๋ชจ๋ ์ฝ์
for(int i=0; i<cookies.length; i++) {
String name = cookies[i].getName();
System.out.println("์ฝ์ ์ฟ ํค name :"+name);
if(name.equals("id")) {
id = URLDecoder.decode(cookies[i].getValue(), "utf-8");
}
if(name.equals("pwd")) {
pwd = URLDecoder.decode(cookies[i].getValue(), "utf-8");
}
}
} catch (Exception e) {
// TODO: handle exception
}
if(id != null && pwd != null) {
out.println(id+"๋ ์ฟ ํค๋ฅผ ํตํด ๋ก๊ทธ์ธ ์ํ์
๋๋ค");
out.println("</body></html>");
out.close();
return;
}
out.println("* ๋ก๊ทธ์ธ *");
out.println("<form method='post'>");
out.println("id : <input type='text' name='id'><br/>");
out.println("pwd : <input type='text' name='pwd'><br/>");
out.println("<input type='submit' value='๋ก๊ทธ์ธ'>");
out.println("</form>");
out.println("</body></html>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
System.out.println(id+" "+pwd);
if(id.equals("aa")&&pwd.equals("11")) {
try {
// ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ์ฟ ํค ์์ฑ ํ ํด๋ผ์ด์ธํธ ์ปด์ ์ ์ฅ
id = URLEncoder.encode(id, "utf-8");
Cookie idCookie = new Cookie("id", id);
idCookie.setMaxAge(60*60*24*365);
pwd = URLEncoder.encode(pwd, "utf-8");
Cookie pwdCookie = new Cookie("pwd", pwd);
pwdCookie.setMaxAge(60*60*24*365);
response.addCookie(idCookie); // ํด๋ผ์ด์ธํธ ์ปด์ ์์ด๋ ์ ์ฅ
response.addCookie(pwdCookie); // ํด๋ผ์ด์ธํธ ์ปด์ ๋น๋ฐ๋ฒํธ ์ ์ฅ
out.println("๋ก๊ทธ์ธ ์ฑ๊ณต - ์ฟ ํค๊ฐ ์ค์ ๋จ");
} catch (Exception e) {
System.out.println("์ฟ ํค ์์ฑ ์คํจ :"+e);
}
}else {
out.println("๋ก๊ทธ์ธ ์คํจ");
}
}
}
if(id.equals("aa")&&pwd.equals("11"))
์ด ๋ฉ์๋์์ ์ ์ ์๋ฏ์ด id๋ aa ๋น๋ฐ๋ฒํธ๋ 11๋ก ๊ฐ๋จํ ์ค์ ํด ๋ณด์๋ค. ์๋ฒ๋ฅผ ์ด์ฉํด ์๋ง์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๋ฉด ์ฟ ํค๊ฐ ์๊ธฐ๊ณ ์๋ง์ง ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๋ฉด ์ฟ ํค๋ฅผ ๋ง๋ค์ง ์๋๋ค.
์ผ์ ๊ธฐ๊ฐ ๋์ ๊ฐ์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๋ก ๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์ง์ํค๋ ๊ธฐ์ ์ด๋ค.
์ธ์
์ ์ฟ ํค์ ๋ฌ๋ฆฌ ๋ฐฉ๋ฌธ์์ ์์ฒญ์ ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ๋ฐฉ๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๊ฒ์ด ์๋ ์น ์๋ฒ๊ฐ ์ธ์
์์ด๋ ํ์ผ์ ๋ง๋ค์ด ์๋น์ค๊ฐ ๋์๊ฐ๊ณ ์๋ ์๋ฒ์ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค.
์ธ์
๋ key value ํํ์ด๋ค. ๋ณดํต ์ธ์
์ ๋ง๋ฃ๊ธฐ๊ฐ์ 30๋ถ์ด์ง๋ง(default) ์ง์ ์ค์ ํ ์ ์๋ค. web.xml์์ ์ค์ ํ๋ฉด ์ ์ฒด์ ์ธ์ ๊ธฐ๊ฐ์ ์ค์ ํ ์ ์๊ณ ๊ฐ๊ฐ์ servlet๋ง๋ค๋ ์ค์ ํ ์ ์๋ค. ์๋ก ๊ณ ์นจํ๋ฉด ์นด์ดํธ๋ฅผ ๋ค์ ์์ํ๋ค.
์ธ์
์ ์ด์ฉํด ๋ฐฉ๋ช
๋ก, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ์ ๋ง๋ค ์ ์๋ค.
Cookie | Session |
---|---|
ํด๋ผ์ด์ธํธ์ ์ ์ฅ | ์๋ฒ์ ์ ์ฅ |
ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋ฒ์ ์์์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์ด์ | ์๋ฒ์ ์ ์ฅ๋๋ฏ๋ก ์๋ฒ์ ์์์ ์ฌ์ฉ |
์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ์ฌ์ฉ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ถํ๊ฐ ์ฌํ ์ ์๋ค. | |
์ ๋ขฐ๋๊ฐ ๋จ์ด์ง๋ค. | ๋ณด์๋ฉด์์ ๋ ์ฐ์ |
๋ง๋ฃ์๊ฐ ๋์ ํ์ผ๋ก ์ ์ฅ๋๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํด๋ ์ ๋ณด๊ฐ ๋จ์์๋ค. | ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ๋ง๋ฃ์๊ฐ์ ์๊ด์์ด ์ญ์ ๋๋ค. |
์ฐธ๊ณ
https://code-lab1.tistory.com/298
https://dololak.tistory.com/534
https://velog.io/@whwodgns/JS-Session%EC%9D%B4%EB%9E%80