🔒 로그인 처리하기 - 쿠키, 세션 사용
영속 쿠키
: 만료 날짜를 입력하면 해당 날짜까지 유지세션 쿠키
: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 // 쿠키 생성
Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId()));
// 쿠키 보내기
response.addCookie(idCookie);
// 쿠키 생성 후 "/"(home)으로
return "redirect:/";
@CookieValue
: 쿠키에 담긴 값 사용required = false
: 쿠키 정보가 없어도 접근 가능 = 로그인 안 한 사용자도 사용 가능public String homeLogin(
@CookieValue(name="memberId", required = false) Long memberId, Model model) {
// 로그인 한 사용자가 아니라면 home으로
if(memberId == null) {
return "home";
}
// db 조회를 한 후, 사용자가 없으면 다시 home으로 보낸다.
Member loginMember = memberRepository.findById(memberId);
if( loginMember == null ) {
return "home";
}
// 로그인에 성공한 사람은 loginHome화면으로 이동 model.addAttribute("member",loginMember);
return "loginHome";
}
private void expireCookie(HttpServletResponse response, String CookieName) {
Cookie cookie = new Cookie(CookieName, null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
@PostMapping("/logout")
public String logout(HttpServletResponse response) {
expireCookie(response, "memberId");
return "redirect:/";
}
cookie
: HttpServletResponsesession
: HttpServletRequest
project > application.properties에 추가
# session time out server.servlet.session.timeout=1800
- 시간단위 : 초 단위
- 1800 -> 30분
request.getSession(true);
request.getSession(false);
request.getSession();
request.getSession(true);
와 동일 public class SessionConst {
public static final String LOGIN_MEMBER = "loginMember";
}
//세션 생성
HttpSession session = request.getSession();
// 속성 설정
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
// 세션 생성 후 "/"(home)으로
return "redirect:/";
// 세션 받기
HttpSession session = request.getSession(false);
// 받은 세션 사용
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
@GetMapping("/")
public String homeLoginv3(
@SessionAttribute(name=SessionConst.LOGIN_MEMBER, required = false)Member loginMember ,
Model model)
session.invalidate();
사용해서 세션 삭제 @PostMapping("/logout")
public String logoutv2(HttpServletRequest request) {
// 세션 받아서
HttpSession session = request.getSession(false);
if( session != null ) {
// 세션 삭제
session.invalidate();
}
return "redirect:/";
}