1. 요청
클라이언트를 식별하는 session id를 생성한다.
이미 세션이 존재할 경우 해당 세션을 식별하고 유지한다
2. 응답
서버는 session id로 key와 value를 저장하는 HttpSession을 생성하고, session id를 저장하고 있는 쿠키를 생성하여 클라이언트에게 전송한다.
클라이언트는 서버 측에 요청을 보낼 때, session id를 가지고 있는 쿠키를 전송한다.
서버는 쿠키의 session id로 HttpSession을 찾는다.
javax.servlet.http.HttpSession으로 세션 데이터를 다룰 수 있다.
HttpSession session = request.getSession();
HttpSession session = request.getSession(true);
request의 getSession() 메서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 새 세션을 생성하여 반환한다. (인수 default가 true)
새롭게 생성된 세션인지는 HttpSession의 isNew() 메서드로 알 수 있다.
HttpSession session = request.getSession(false);
setAttribute(String name, Object value)
session.setAttribute(이름, 값)
setAttribute는 name, value 쌍으로 객체 Object를 저장하는 메서드다.
세션이 유지되는 동안 저장된다.
getAttribute(String name)
getAttribute 메서드로 세션에 저장된 값을 조회할 수 있다.
리턴 타입은 Object이므로 형변환이 필요하다.
String valeu = (String)session.getAttribute("name");
removeAttribute(String name)
invalidate()
@RequestMapping(value = "/loginResult", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public ModelAndView loginProc(@ModelAttribute LoginDTO loginDTO,
HttpSession session) {
ModelAndView mav = new ModelAndView();
LoginDTO result = loginDAO.login(loginDTO);
if(result != null && result.getEmail() != null) {
if(result.getMemgrade().equals("F")) {
// 탈퇴했거나 강제탈퇴된 회원
session.setAttribute("s_grade", result.getMemgrade());
System.out.println("로그인 실패");
mav.setViewName("layout/member/loginFail");
}else {
// 로그인 성공 시
session.setAttribute("s_email", result.getEmail());
session.setAttribute("s_nickname", result.getNickname());
session.setAttribute("s_grade", result.getMemgrade());
System.out.println((String)session.getAttribute("s_grade"));
session.setAttribute("s_gumqty", result.getGumqty());
System.out.println("로그인 성공");
System.out.println(result);
mav.setViewName("layout/home");
}
} else {
// 로그인 실패 시
System.out.println("로그인 실패");
mav.setViewName("layout/member/loginFail");
}
return mav;
}//loginProc end
@RequestMapping("/logOut")
public ModelAndView logout(HttpSession session) {
ModelAndView mav = new ModelAndView();
session.removeAttribute("s_email");
session.removeAttribute("s_nickname");
session.removeAttribute("s_grade");
session.removeAttribute("s_gumqty");
mav.setViewName("layout/home");
return mav;
}//logout end
WAS는 세션을 통해 클라이언트와 서버 간의 지속적인 상태를 유지하며 이를 통해 사용자는 여러 페이지 간에 정보를 공유하거나 유지할 수 있다!
참조
https://byul91oh.tistory.com/227
https://enai.tistory.com/29