HTTP이 Connectionless, Stateless한 특성이 있기 때문에 이 2가지를 해결하기 위해 쿠키/세션을 사용
Connectionless
Stateless
클라이언트가 -> 서버, 페이지 요청
서버에서 쿠키 생성하고 / 서버 -> 클라이언트 HTTP 헤더에 Cookie를 Header에 포함하여 응답
* 연결 종료
클라이언트 -> 서버 / 위와 같은 요청을 할 경우 HTTP 헤더에 Cookie를 함께 보냄
서버 -> 클라이언트 / 이전 상태 정보를 업데이트 할 필요가 있을때 Cookie를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답, 없으면 그대로 전달
# Server -> Client 쿠키와 함께 전송
if (loginChk != null) { // 아이디 저장 체크한 경우 (JSP 코드)
Cookie c = new Cookie("id", id);
c.setMaxAge(60 * 2);
c.setPath("/");
response.addCookie(c);
}
# Client -> Server (쿠키와 함께 전달)하였을때 쿠키를 보고 다음 페이지로 전달
<%
Cookie[] c = request.getCookies();
if (c != null) {
for (Cookie cf : c) {
if (cf.getName().equals("id")) {
response.sendRedirect("sessionMain.jsp");
}
}
}
%>
// 파라미터로 HttpSession을 받아 세션을 사용한다.
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpSession session) {
Member mem = service.memberSearch(member);
session.setAttribute("member", mem);
return "/member/loginOk";
}
// 세션 삭제 (로그아웃)
/* HttpSession */
@RequestMapping("/logout")
public String memLogout(Member member, HttpSession session) {
session.invalidate(); // 세션 삭제
return "/member/logoutOk";
}
브라우저를 사용하는 환경 (로컬 컴퓨터
)에 서버에서 받은 데이터를 저장한 파일 (쿠키와동일)
이미지같은 재사용될 것 같거나 용량이 큰 리소스를 임시로 저장해두어서 렌더링 속도를 높이는 것이 목적!
쿠키와는 비슷하지만 목적성에 차이가 있다