쿠키는 보안상 문제가 있다 -> 세션 사용
쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다.
토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다.
해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 토큰을 강제로 제거하면 된다.
세션을 직접 만들어서 하는 건 생략, 서블릿에서 지원하는 세션 사용하기
//request에서 세션 가져오기
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 담기
session.setAttribute(SessionConst.MY_SESSION, loginMember);
하나의 세션에 여러 값을 저장할 수 있다.
request.getSession(true)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성해서 반환한다.
request.getSession(false)
세션이 있으면 기존 세션을 반환한다.
세션이 없으면 새로운 세션을 생성하지 않는다. null 을 반환한다.
@GetMapping("/logout")
public String logout(HttpServletRequest request){
HttpSession session = request.getSession(false);
if (session != null){
session.invalidate();
}
return "redirect:/";
}
session.invalidate();
http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872
server.servlet.session.tracking-modes=cookie