먼저 key이름 같은 건 자주 쓰니
public interface SessionConst {
public static final String LOGIN_MEMBER = "loginMember";
}
아예 인터페이스에다가 public으로 String 해놔서 등록.
@PostMapping("/login")
public String loginV3(@Validated @ModelAttribute LoginForm loginForm, BindingResult bindingResult, HttpServletRequest request){
if(bindingResult.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(loginForm.getLoginId(), loginForm.getPassword());
if(loginMember == null){
bindingResult.reject("loginFail", "아이디 혹은 비밀번호가 맞지 않습니다.");
return "/login/loginForm";
}
HttpSession session = request.getSession(); //세션 있으면 반환, 없으면 신규 생성
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
return "redirect:/";
}
검증 하고,
로그인 성공 시 (제대로 Member 객체를 가져올 시)
세션 생성
request.getSession() 하면 세션 있으면 반환하고, 없으면 신규 생성임.
request.getSession(true) 이게 있으면 반환, 없으면 신규 생성인데, default값이 true임.
false는 있으면 반환, 없으면 신규생성임.
그 다음 session에 객체 등록.
보아하니 request.getSession()이 세션 자체를 신규 생성이나 불러오는 거고,
session.setAttribute 이게 세션에 실제 값을 넣는 거 인 듯.
key, value 형태로.
저거 여러 개 넣을 수 있다고 함.
그러면 로그인 성공 했을 때만 세션 저장하게 한 다음에,
추가로 session.setAttribute("ipAddress", request.getRemoteAddr) 해서 ip까지 비교해서 다중 로그인 막을 수 있을 듯. (근데 뭐 이것도 포스트맨 같은 걸로 IP바꿔서 보내는 건 일도 아닐 듯. 아니 그래도 결국 응답은 그 IP로 오니까..)
파괴는
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request){
HttpSession session = request.getSession(false);
if(session != null){
session.invalidate();
}
return "redirect:/";
}
session.invalidate() 하면 파괴된다고 함. 아예 다 날라가 버리는 듯. 세션에 넣었던 것들.
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model) {
HttpSession session = request.getSession(false);
if(session == null){
return "home";
}
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
if(loginMember == null){
return "home";
}
model.addAttribute("member", loginMember);
return "loginHome";
}
꺼낼 땐 이렇게 꺼내면 됨.
우선 있는지 없는지 확인할 때는 없으면 새로 생성하면 안되니까, false로 해서 없으면 null로 반환받게끔 함.
session.getAttribute(key);
key를 언제 쓰나 했더니 서버 개발자가 쓰는거였군.. 하긴 세션은 서버에서만 관리하니까..
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
53. 세션 정보 확인과 타임아웃 설정 (0) | 2023.09.07 |
---|---|
52. 스프링 세션 업그레이드 (0) | 2023.09.07 |
50. 서버세션 적용 (0) | 2023.09.06 |
49. 서버세션 구현 (0) | 2023.09.06 |
48. 서버 세션 (0) | 2023.09.05 |