로그인 상태 유지하기
로그인에 성공하면, 쿠키를 생성하고 HttpServletResponse에 담는다.
웹 브라우저는, 세션이 끊기기 전까지 쿠키를 서버에 계속 보내줌
로그아웃시에는, 똑같은 이름의 새 쿠키를 생성하고,.setMaxAge(0)으로 지속시간을 없애고, HttpServletResponse 에 담아주면 된다.
쿠키값은 임의로 바뀔 수도 있고, 웹 브라우저에 보관되기 때문에 누군가 정보를 훔처갈 수도 있음
해커가 한번 쿠키를 가져가면 평생 사용 가능
대안
쿠키는 여러 보안 이슈가 있다.
이 문제를 해결하기 위해, 중요한 정보는 서버에 저장하고, 클라이언트와 서버를 임의의 식별자 값으로 연결해야 한다.
로그인

loginId,password정보를 전달하면 서버에서 확인한다.세선 생성

응답 쿠키

결국 쿠키를 사용하지만, 클라이언트는 세션ID만 가지고 있을 뿐 중요한 정보는 서버에 있다
클라이언트의 쿠키 전달

세션은 특별한게 아니고 단지 쿠키를 사용해서 서버에서 데이터를 유지하는 방법일 뿐이다
서블릿의 HttpSession 기능을 사용
세션 생성 & 조회
request.getSession(true) default
false를 주면, 없으면 null반환정보보관 & 삭제
session.setAttribute(String name, Object value);로 값 넣기public String logoutV3(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
return "redirect:/";
}
//request.getSession(false)로 세션이 있는지 확인
//만일 세션이 있으면 invalidate()를 통해 제거
@SessionAttribute를 통해 세션에서 간단하게 꺼낼 수 있음
@GetMapping(.....)
public String homeLoginV3Spring(
@SessionAttribute(name = "loginMember",
required = false) Member loginMember, Model model)
세션 기본 정보
sessionId : 세션아이디maxInactiveInterval 유효시간creationTime : 생성일시lastAccessedTime : (사용자가) 최근 서버에 접근한 시간isNew 새로 생성됬는지타임아웃 설정
현재 사용자가 로그아웃을 하지 않으면, 서버는 세션 데이터를 계속 보관해야함
따라서, 사용자가 최근에 요청한 시간을 기준으로 생존시간을 유지해줌
application.properties에 설정server.servlet.session.timeout=60 (60초)session.setMaxInactiveInterval(60);lastAcessTime 이후로 timeout 시간이 지나면, Was가 세션을 제거해줌
세션은 기본적으로 메모미를 사용하므로, 최소한의 정보만 보관하자