일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Spring legacy Project
- github
- mysql
- list
- JVM
- 상속
- 스프링 컨테이너
- java
- 의존성주입
- Spring 개발환경 설정
- merge
- spring
- 빈
- react
- @Bean
- 스프링
- springboot
- 리액트
- 자바
- 이클립스
- @transactional
- 트랜잭션
- 객체
- 자동주입
- DI
- 인터페이스
- 깃허브
- pom.xml
- 영속성 컨텍스트
- 어노테이션
- Today
- Total
DEVLOG
세션, 쿠키 본문
Connection Protocol
서버의 부하를 줄일 수 있는 장점은 있나, 클라이언트의 요청 시마다 서버와 매번 새로운 연결이 생성되므로 일반적인 로그인 상태 유지, 장바구니 등의 기능을 구현하기 어렵다.
이러한 Connection Protocol의 불편함을 해결하기 위해 세션과 쿠키를 이용한다. 한 번 요청하고 한 번 응답 후 연결이 끊기더라도 연결되었던 정보로 연결 유지가 가능하다.
세션은 서버에서 연결 정보를 관리하는 반면 쿠키는 클라이언트에서 연결 정보를 관리하는 데 차이가 있다.
세션(Session)
아래 두 방법은 세션 사용 방법이다.
차이점은 거의 없고, 세션 객체를 얻는 방법에 차이가 있을 뿐이다.
[세션 사용]
1. HttpServletRequest를 이용한 세션 사용
스프링 MVC에서 HttpServletRequest를 이용해서 세션을 이용하려면 컨트롤러의 메소드에서 파라미터로 HttpServletRequest를 받으면 된다.
즉, 파라미터로 HttpServletRequest을 받아 세션을 사용한다.
MemberController.java
@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";
}
2. HttpSession을 이용한 세션 사용
파라미터로 HttpSession을 받아 세션을 사용한다.
그러므로 getSession() 메소드는 필요 없다.
@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";
}
[세션 삭제]
로그아웃, 회원탈퇴 등 세션에 저장된 속성이 더 이상 필요없을 때 사용된다.
session.invalidate(); 메소드를 활용한다.
1. HttpServletRequest를 이용한 세션 삭제
@RequestMapping("/logout")
public String memLogout(Member member, HttpServletRequest request) {
HttpSession session = request.getSession();
session.invalidate();
return "/member/logoutOk";
}
2. HttpSession를 이용한 세션 삭제
매개변수로 HttpSession을 받으므로 getSession() 메소드는 필요없다.
@RequestMapping("/logout")
public String memLogout(Member member, HttpSession session) {
session.invalidate();
return "/member/logoutOk";
}
쿠키(Cookie)
HttpServletResponse를 파라미터로 받아 사용한다.
쿠키를 생성할 때는 생성자에 두 개의 파라미터를 넣어주는데, 첫 번째는 쿠키 이름을 넣어주고 두 번째는 쿠키 값을 넣어준다.
@RequestMapping("/main")
public String mallMain(Mall mall, HttpServletResponse response){ // 파라미터
Cookie genderCookie = new Cookie("gender", mall.getGender()); // 쿠키생성
if(mall.isCookieDel()) {
genderCookie.setMaxAge(0); // 유효시간 0 설정 -> 사용 불가능
mall.setGender(null);
} else {
genderCookie.setMaxAge(60*60*24*30); // 60초 * 60분 * 24시간 * 30일 = 한 달 동안 쿠키 유지하라
}
response.addCookie(genderCookie); // 받아온 response에 쿠키 넣어줌
return "/mall/main";
}
@CookieValue 어노테이션
@CookieValue 어노테이션을 이용하면 쿠키 값을 파라미터로 전달받을 수 있다.
@CookieValue 어노테이션은 해당 쿠키가 존재하지 않으면 기본적으로 500 에러를 발생시킨다. 따라서, 쿠키가 필수가 아닌 경우에는 required 속성의 값을 false로 지정해 주어야 한다. required 속성의 기본 값은 true이다.
required 속성의 값을 false로 지정할 경우, 해당 쿠키가 존재하지 않으면 null을 값으로 전달받게 된다.
MallController.java
@RequestMapping("/index")
public String mallIndex(Mall mall,
// value="쿠키이름", required=false(해당 쿠키가 없더라도 exception 발생하지 않도록 설정(디폴트 true))
@CookieValue(value="gender", required=false) Cookie genderCookie,
HttpServletRequest request) {
if(genderCookie != null)
mall.setGender(genderCookie.getValue()); // mall.getGender()
return "/mall/index";
}
🙆♂️출처🙇♂️
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌 - 인프런 | 강의
스프링 프레임워크 기본부터 실전 사용법까지! 충실하고 폭넓은 설명과 예제를 통해 현장에 바로 투입되어 활약하는 개발자로 거듭나세요., - 강의 소개 | 인프런...
www.inflearn.com
https://writingdeveloper.blog/163
[Spring] 01-9. CookieValue Annotation을 이용한 쿠키 Mapping, 파라미터 타입 정리
@CookieValue Annotation을 이용하면 쿠키 값을 파라미터로 전달받을 수 있다. @CookieValue Annotation은 해당 쿠키가 존재하지 않으면 기본적으로 500 에러를 발생시킨다. 따라서, 쿠키가 필수가 아닌 경우에
writingdeveloper.blog
'Spring' 카테고리의 다른 글
@RequestParam("name")어노테이션과 @ModelAttribute 어노테이션 생략 (0) | 2022.06.15 |
---|---|
리다이렉트, 인터셉터 (0) | 2022.06.14 |
Controller 객체 구현 - 2 (0) | 2022.06.11 |
Controller 객체 구현 - 1 (0) | 2022.06.11 |
Service & Dao 객체 구현 (0) | 2022.06.10 |