세션과 마찬가지로 Connectionless Protocol의 불편한 점을 해결하기 위해 쿠키를 사용한다.
그렇다면, 쿠키와 세션의 차이점은 무엇이 있을까?
쿠키 (Cookie) | 세션 (Session) | |
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | text (key-value) | Object |
만료 시점 | 쿠키 저장시 설정(만료 시간 기준) | 브라우저 종료시 삭제(기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB(=4096byte) |
서버가 허용하는 한 용량제한 없음. |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
1. 쿠키 생성
- HttpServletResponse 사용
쿠키를 생성할 때, 쿠키를 담고 있는 HttpServletResponse를 파라미터로 사용한다.
- 쿠키 생성자
쿠키를 생성할 때 생성자에 두 개의 파라미터를 넣어준다.
-> 첫 번째 파라미터 : 쿠키 이름, 두 번째 파라미터 : 쿠키 값
Cookie cookie = new Cookie("name",user.getName());
2. 쿠키 유효기간 설정
쿠키의 유효기간은 setMaxAge()를 통해 설정한다.
if(user.isCookieDel()) {
cookie.setMaxAge(0);
user.setName(null);
} else {
cookie.setMaxAge(60*60*24*30);
}
response.addCookie(cookie);
3. 쿠키 사용
쿠키를 사용할 때는 @CookieValue를 사용한다.
@CookieValue는 value 속성은 쿠키 이름을 나타낸다. 만약 value에 명시한 쿠키가 없을 경우엔 익셉션이 발생한다.
이 익셉션을 막기 위해서 required 속성을 사용한다. required 속성의 기본값은 true이고, 이 값을 false로 설정하여 value 값에 해당하는 쿠키가 없어도 익셉션이 발생하지 않도록 해준다.
@RequestMapping("/index")
public String userInfo(User user,
@CookieValue(value="name", required=false) Cookie cookie,
HttpServletRequest request) {
if(cookie != null)
user.setName(cookie.getValue());
return "/user/info";
}
참고 : https://opentogether.tistory.com/93#recentEntries
[Spring] 스프링 인터셉터 (0) | 2021.06.05 |
---|---|
[Spring] Session 연결하기 (0) | 2021.06.03 |