Spring/Study 2020. 4. 18. 20:54

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

웹 서비스는 HTTP 프로토콜을 기반으로 하는데, HTTP 프로토콜은 클라이언트와 서버의 관계를 유지하지 않는 특징이 있다. 이러한 특징 때문에 서버의 부하를 줄일 수는 있지만, 매번 새로운 연결이 생성되므로 로그인 상태 유지 등의 기능을 구현하기가 어렵다. 따라서 세션(Session)과 쿠키(Cookie)를 이용하여 서버의 연결을 유지시키게 되는데, 세션은 서버에서 연결 정보를 관리하고, 쿠키는 클라이언트에서 연결 정보를 관리한다는 차이점이 있다.

 

세션(Session)

HttpServletRequest를 이용한 세션 사용

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpServletRequest request) {        
    Member mem = service.memberSearch(member);
    
    HttpSession session = request.getSession();
    session.setAttribute("member", mem);
    
    return "/member/loginOk";
}
cs

HttpSession을 이용한 세션 사용

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpSession session) {        
    Member mem = service.memberSearch(member);
        
    session.setAttribute("member", mem);
        
    return "/member/loginOk";
}
cs

invalidate() 메소드를 이용한 세션 삭제

@RequestMapping("/logout")
public String memLogout(Member member, HttpSession session) {
    session.invalidate();
        
    return "/member/logoutOk";
}
 
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public String memRemove(Member member, HttpServletRequest request) {        
    service.memberRemove(member);
        
    HttpSession session = request.getSession();
    session.invalidate();
        
    return "/member/removeOk";
}
cs

 

쿠키(Cookie)

쿠키 생성

- 쿠키 생성 시 파라미터의 첫 번째는 쿠키의 이름, 두 번재는 쿠키의 값이 들어간다.

@RequestMapping("/main")
public String mallMain(Mall mall, HttpServletResponse response){
    Cookie genderCookie = new Cookie("gender", mall.getGender());
        
    if(mall.isCookieDel()) {
        genderCookie.setMaxAge(0);
        mall.setGender(null);
    } else {
        genderCookie.setMaxAge(60*60*24*30);
    }
 
    response.addCookie(genderCookie);
        
    return "/mall/main";
}
cs

쿠키 사용

- @CookieValue로 쿠키를 사용한다. value에 명시한 쿠키가 없을 경우 Exception이 발생하는데, required를 false로 설정해서 해당하는 쿠키가 없어도 Exception이 발생하지 않도록 할 수 있다. (requied의 Default는 true)

 

@RequestMapping("/index")

public String mallIndex(Mall mall, @CookieValue(value="gender", required=false) Cookie genderCookie, HttpServletRequest request) {

    if(genderCookie != null) mall.setGender(genderCookie.getValue());

        

    return "/mall/index";

}

 

Colored by Color Scripter

cs

posted by DevMoomin
: