1. Session
1 - 1 Session의 정의
- 망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결
- 프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠 때까지의 기간
즉 , 일정 시간동안 같은 사용자 ( 브라우저 ) 로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.
여기서 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 말하며 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션으로 칭한다는 것이다.

2. HTTP Session이란
- Session이란 서버가 해당 서버 ( 웹 ) 로 접근 ( Request ) 한 클라이언트 ( 사용자 ) 를 식별하는 방법
- 서버 ( 웹 ) 는 접근한 클라이언트 ( 사용자 ) 에게 Response-header field인 set-cookie값으로 클라이언트 식별자인 Session-id ( 임의의 긴 문자열 ) 을 발행 ( 응답 ) 한다.
- 서버로부터 발행 ( 응답 ) 된 Session-id는 해당 서버 ( 웹 ) 와 클라이언트 ( 브라우저 ) 메모리에 저장된다.
이때 클라이언트 메모리에 사용되는 cookie 타입은 세션 종료시 같이 소멸되는 "Memory cookie"가 사용된다. - 서버로부터 발행된 Session ( 데이터 ) 을 통해 개인화 ( 사용자 ) 를 위한 데이터로 활용할 수 있다.
3. HTTP Session의 동작 순서
- 클라이언트 ( 사용자 ) 가 서버로 접속 ( http 요청 ) 을 시도
- 서버 ( 웹 ) 은 접근한 클라이언트의 Request-header field인 cookie를 확인해 클라이언트가 해당 session-id를 보내왔는지 확인
- 만약 클라이언트로부터 발송된 session-id가 없다면 , 서버는 session-id를 생성해 클라이언트에게 response-header field인 set-cookie 값으로 session-id ( 임의의 긴 문자열 ) 을 발행 ( 응답 ) 한다.
@PostMapping("/login")
public String login(@ModelAttribute MemberDTO memberDTO, Model model) {
MemberDTO m = memberService.login(memberDTO);
if(m!=null){
model.addAttribute("loginEmail",memberDTO.getMemberEmail());
return "/memberMain";
}else {
return "errorPage";
}
}
컨트롤러에서 만약 로그인 기능을 판별 할 때 , model로 loginEmail을 가져가면 다른 페이지로 넘어가면 model은 일회성이기 때문에 로그인 값이 사라질 것이다.
@PostMapping("/login")
public String login(@ModelAttribute MemberDTO memberDTO, HttpSession session) {
MemberDTO m = memberService.login(memberDTO);
if(m!=null){
session.setAttribute("loginEmail",memberDTO.getMemberEmail());
return "/memberMain";
}else {
return "errorPage";
}
}
하지만 Session으로 loginEmail을 담아두면 다른 페이지로 이동해도 그 값이 사라지지 않을 것이다.