쿠키와 세션은 왜 필요한가?
- 앞선 포스팅에서 로그인 서비스 웹 페이지를 만들어보았다. 하지만 각 HTML 즉, 웹 페이지 간 정보 공유가 되는 방법이 없다. 그 이유는 HTTP가 비연결형 프로토콜이기 때문이다.

- 즉 클라이언트와 서버간의 요청, 응답이 끝나면 그 즉지 연결이 종료되어 어떤 정보도 주고받지 않는다는 뜻이다.

- 그 말인 즉슨 웹 페이지는 누가 로그인을 했는지, 다음 서비스를 제공할 수 없다는 뜻이다.

- 그래서 이를 보완하고자 나온 개념이
cookie
와 session
이다. 
cookie
와 session
의 차이점

1. Cookie
1. cookie 생성
- 자바코드이기 때문에 항상 JSP에서 씌여야 한다. 즉, Cookie나 Session이 사용될 페이지는 jsp로 작성되어야 한다는 뜻이다.
<%
Cookie cookie = new Cookie("id", "smart");
%>

2. cookie 전송
- 사용자에게 무언가를 보내려면
response
객체를 쓰면 된다.
<%
response.addCookie(cookie);
%>
3. cookie 가져오기
- 사용자 pc에 저장된 쿠키정보를 가져옴 이때 쿠키가 한두개가 아니기 때문에 배열형태로 가져온다.
<%
Cookie[] cookies = request.getCookies();
%>
4. cookie 확인하기


<%
for(int i =0; i<cookies.length; i++){
out.print("쿠키 이름 : " + cookies[i].getName()+"<br>");
out.print("쿠키 콘텐츠 : " + cookies[i].getValue()+"<br>");
}
%>
- 다른 정보는 암호화 되어있지만 보안을 위해 올리지 않겠다.
5. cookie 삭제하기
- 사용pc에 direct로 접근하여 파일을 삭제할 수 없기에 cookie의 수명을 조절하여 덮어 씌우는 방식으로 cookie를 삭제하고 있다.
<%
//삭제하려는 쿠키의 Name값으로 쿠키생성
Cookie cookie = new Cookie("id","");
// 쿠키의 생명주기를 설정
cookie.setMaxAge(0);
// 사용자의 pc에 쿠키 덮어 씌우기
response.addCookie(cookie);
%>

1-2 Cookie 적용
// JDBC 연동 후 select문으로 id, pw가 일치할 때 실행문.
if(rs.next()) {
Cookie cookie = new Cookie("id",id);
response.addCookie(cookie);
response.sendRedirect("LoginS.jsp");
}else {
response.sendRedirect("LoginF.html");
}
- 로그인 성공시 클라이언트의 이름 작성 후 환영 문구 출력하는 jsp
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("id")) {
out.print(cookies[i].getValue() + "님 환영합니다." + "<br>");
}
}
2. Session
- 아래 코드들을 보면 cookie와는 다르게 생성자가 없다. 그 이유는
request
, response
, out
처럼 내장 객체라 객체 생성없이 바로 사용 가능하기 때문이다.
- 아래 코드가 실행되는 순간 서버어느 구석에 세션이 생성이 되고 그 안에 name이라는 상자에 value가 생성되어있다는 것을 항상 생각해야 한다.
1. session 생성 (get)
<%
session.setAttribute("id","smart");
%>

2. session 가져오기 (set)
- session의 get함수가 가져오는 자료형은 모든 class의 super class인 Object class이다. 따라서 원하는 query를 짜고 싶다면 반드시 형 변환히 필수이다.
<%
String id = (String)session.getAttribute("id");
%>
3. session 삭제 (remove)
<%
session.removeAttribute("id");
%>
2-1. Session 적용
servlet과 달리 jsp는 객체 자동생성 기능이 없으므로 servlet에서 사용한다면 객체를 생성후 사용하여야 한다.
// JDBC 연동 후 select문으로 id, pw가 일치할 때 실행문.
if(rs.next()) {
HttpSession session = request.getSession();
사용자 'id'를 server 한 구석에 session 할당(set).
session.setAttribute("id", id);
response.sendRedirect("LoginS.jsp");
} else {
response.sendRedirect("LoginF.html");
}
- 로그인 성공시 클라이언트의 이름 작성 후 환영 문구 출력하는 jsp
<%
// 서버 한 구석에 만들어져 있는 session을 가져와서(get) 쓰겠다.
String id =(String)session.getAttribute("id");
%>
<%= id %>님 환영합니다.
전체 그림
