섹션 5. 연결
20강 세션, 쿠키
20-1 세션(Session)과 쿠키(Cookie)
Connectionless Protocol
- 웹 서비스는 HTTP 프로토콜을 기반으로 하는데, HTTP 프로토콜은 클라이언트와 서버의 관계를 유지하지 않는 특징이 있음.
- 클라이언트가 요청할 때 서버가 연결되고 서버의 응답이 끝나면 서버의 연결이 해제됨.
- 서버의 부하를 줄일 수 있는 장점이 있으나, 클라이언트의 요청 시마다 서버와 매번 새로운 연결이 생성되기 때문에 일반적인 로그인 상태 유지, 장바구니 등의 기능을 구현하기 어려움
👉 세션과 쿠키를 이용해 클라이언트와 서버의 연결 상태를 유지
세션: 서버에서 연결 정보 관리
쿠키: 클라이언트에서 연결 정보 관리
20-2 HttpServletRequest를 이용한 세션 사용
파라미터로 HttpServletRequest를 받은 후 getSession()으로 세션 얻음.
@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); //세션에 attribute 추가
return "/member/loginOk";
}
20-3 HttpSession을 이용한 세션 사용
파라미터로 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";
}
20-4 세션 삭제
세션을 삭제하는 방법은 세션에 저장된 속성이 더 이상 필요 없을 때 이루어지는 과정으로 주로 로그아웃 또는 회원 탈퇴 등에 사용됨
@RequestMapping("/logout")
public String memLogout(Member member, HttpSession session) {
session.invalidate(); //
return "/member/logoutOk";
}
20-5 세션 주요 메소드 및 플로어
20-6 쿠키(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";
}
@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";
}
@CookieValue 어노테이션의 value 속성은 쿠키 이름을 나타내는데, 만약 value에 명시한 쿠키가 없을 경우 Exception이 발생한다.
Exceiption을 막는 방법이 있는데, 바로 required 속성이다. Required 속성은 기본값으로 true를 가지고 있는데 required가 true인 경우 value값에 해당하는 쿠키가 없으면 익셉 션이 발생한다. 따라서 required 속성값을 false로 설정해서 value값에 해당하는 쿠키가 없어도 익셉션이 발생하지 않도록 한다
'스터디📖 > Spring' 카테고리의 다른 글
5. 연결 - 2 (0) | 2021.07.21 |
---|---|
5. 연결 - 1 (0) | 2021.07.19 |
4. 설정 및 구현 - 7 (0) | 2021.07.15 |
4. 설정 및 구현 - 6 (0) | 2021.07.14 |
4. 설정 및 구현 - 5 (0) | 2021.07.13 |