HTTP프로토콜의 특성은 상태 유지가 안되는 프로토콜입니다.
그말은 즉 각각의 HTTP 요청이 독립적이라는것입니다. HTTP 요청을 받는 서버 입장에서 여러개의 요청이 한 브라우저 혹은 사용자가 요청하고 있다는것을 알수 없습니다.
비연결지향이라는 특성 덕분에 리소스의 낭비가 줄어드는것은 좋지만 이것이 항상 편리하게만 작용하는것은 아닙니다. 바로 같은 사용자로부터 일련의 요청을 묶어야할 때가 필요하기 때문입니다. 흔한 예로 인터넷 쇼핑에서 로그인을 하고 여러 상품을 검색하고 찾을때 계속 로그인이 유지되는것입니다.
따라서 상태유지를 위해 Cookie와 Session이 등장하게 됩니다.
쿠키란?
정의
- 클라이언트 단에 저장되는 작은 정보의 단위 입니다.
- 클라이언트에서 생성하고 저장될 수 있고, 서버 단에서 전송한 쿠키가 클라이언트에 저장될 수 있습니다.
이용방법
스프링에서 Cookie를 활용하기 위해 이용방법을 알아보겠습니다.
javax.servlet.httpCookie
서버에서 쿠키 생성, Response의 addCookie메소드를 클라이언트에 전송
1
2
|
Cookie cookie = new Cookie(이름, 값);
response.addCookie(cookie);
|
- 쿠키는 (이름, 값)의 쌍 정보를 입력하여 생성합니다.
- 쿠키의 이름은 일반적으로 알파벳과 숫자, 언더바로 구성합니다.
클라이언트가 보낸 쿠키 정보를 읽기
1
|
Cookie[] cookies = request.getCookies();
|
- 쿠키 값이 없으면 null이 반환됩니다.
- Cookie가 가지고 있는 getName()과 getValue()메소드를 이용해서 원하는 쿠키정보를 찾아 사용합니다.
클라이언트에게 쿠키 삭제 요청
1
2
3
|
Cookie cookie = new Cookie("이름", null);
cookie.setMaxAge(0);
response.addCookie(cookie);
|
- 쿠키를 삭제하는 명령은 없고, maxAge가 0인 같은 이름의 쿠키를 전송합니다.
쿠키의 유효기간 설정
- 메소드 setMaxAge()
- 인자는 유효기간을 나타내는 초 단위의 정수형이고 만일 유효기간을 0으로 지정하면 쿠키의 삭제를 의미합니다.
- 음수로 지정하면 브라우저가 종료될 때 쿠키가 삭제됩니다.
- 유효기간을 10분으로 지정하려면 cookie.setMagAge(10 * 60); // 초단위 : 10분으로 지정합니다.
반환형 | 메소드 이름 | 메소드 기능 |
int | getMaxAge() |
쿠키의 최대지속 시간을 초단위로 지정하고 -1일 경우 브라우저가 종료되면 쿠키를 만료 |
String | getName() | 쿠키의 이름을 스트링으로 반환 |
String | getValue() | 쿠키의 값을 스트링으로 반환 |
void | setValue(String newValue) | 쿠키에 새로운 값을 설정할 때 사용 |
Spring MVC에서의 Cookie 사용
- @CookieValue 애노테이션 사용
- 컨트롤러 메소드의 파라미터에서 CookieValue애노테이션을 사용함으로써 원하는 쿠키정보를 파라미터 변수에 담아 사용할 수 있습니다.
1
2
|
public void method(@CookieValue(value="쿠키이름", required=false, defaultValue="기본값") String 변수명){}
|
참고자료: https://www.edwith.org/boostcourse-web/lecture/16798/
참고자료: https://web.stanford.edu/~ouster/cgi-bin/cs142-fall10/lecture.php?topic=cookie
'웹 프로그래밍 > 스프링' 카테고리의 다른 글
인터셉터(Interceptor) (0) | 2020.07.02 |
---|---|
스프링 MVC 빈 설정 (0) | 2019.04.30 |
IntelliJ Maven Project를 이용한 Spring MVC 프로젝트 생성 방법03 (0) | 2019.02.19 |
IntelliJ Maven Project를 이용한 Spring MVC 프로젝트 생성 방법02 (0) | 2019.02.19 |
IntelliJ Maven Project를 이용한 Spring MVC 프로젝트 생성 방법01 (0) | 2019.02.19 |