1. 쿠키(Cookie)
- 클라이언트 컴퓨터에 정보를 저장
- 웹 브라우저가 보관하고 있는 데이터로, 웹 서버에 요청을 보낼 때 쿠키들을 헤더에 담아서 전송
- 온 쿠키들을 보고 서버에서 서버 자신이 저장한 게 있는지 확인
- 서버는 쿠키를 무조건 저장할 수 있긴 하지만 클라이언트에게 쿠키 허용을 물어봐야 하며 결국 쿠키를 저장할지 안할지는 사용자에게 달려있음
* 전송은 헤더와 바디가 있는데, 헤더에는 관련된 정보들이 담겨 있고 바디에는 실제 데이터가 포함되어 있다.
2. 장단점
- 클라이언트의 일정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있음
- 데이터가 사용자 컴퓨터에 저장되기 때문에 보안의 위협을 받을 수 있음
- 데이터 저장 용량에 한계가 있음(소용량의 문자열 데이터)
- 일반 사용자가 브라우저 내의 기능인 "쿠키차단"을 사용하면 무용지물이 됨
3. 실제 사용
- 쿠키 생성
Cookie 객체명 = new Cookie("키", "값"); - 쿠키 저장
- 사용자 컴퓨터에 저장해야 하므로 응답을 통해서 생성한 쿠키를 보내 저장해야 함
response.addCookie(쿠키객체); - 쿠키 사용
- 사용자가 요청 때 함께 보내주는 요청헤더에서 쿠키를 꺼내 사용
request.getHeader("Cookie")
: 요청에 있는 Header 중에서 Cookie라는 이름의 헤더가 있는지 확인, null 이라면 전송된 쿠키가 없다는 뜻
Cookie[] 쿠키객체 = request.getCookies : 전송된 쿠키 객체들의 배열
쿠키객체.getName() : 쿠키의 이름(Key)
쿠키객체.getValue() : 쿠키의 값(Value) - 쿠키 삭제
- 쿠키의 유효기간을 설정해주는 방식으로 삭제
쿠키객체.setMaxAge(n) : n초만큼 유지하다가 쿠키 삭제하도록 설정
- 생명주기는 기본적으로 n이 음수로 되어 있는데, 이것은 브라우저가 종료되면 쿠키 생명주기가 끝난다는 뜻
- 그런 다음 다시 사용자의 컴에 쿠키 저장을 해줘야 진짜로 쿠키가 삭제되는 것이다. - 쿠키 수정
쿠키객체.setValue("값"); 으로 쿠키 객체의 값을 변경 뒤, 다시 response.addCookie("쿠키객체")를 해주어서 저장
- 변경을 하면 실제 사용자의 컴퓨터의 쿠키가 바뀌는 게 아니라 서버에서 가져온 cookie 객체가 바뀌는 것이기 때문에 변경 후 저장해줘야 함
4. 예시
- 서버에서 클라이언트 쪽에 저장을 하기 때문에 response 응답을 보내면서 저장 시켜놓음
- 서버가 클라이언트에 저장 시킨 후 클라이언트 쪽에서 요청을 보낼 때 헤더 안에 Cookie를 같이 요청하면서 보냄
- 그래서 먼저 쿠키를 꺼내오기 전에 header 안에 Cookie가 있는지 먼저 확인을 해야 함
- 쿠키의 값을 수정하고 싶으면 원하는 쿠키객체에 getValue("값")을 해서 바꾸면 되는데 이렇게 되면 실제 사용자 컴에 있는 쿠키는 수정이 되지 않고 서버에서 복사해온 쿠키에만 수정되므로 다시 response를 이용해 쿠키를 저장해주면 된다.
- 출력된 쿠키를 보면 쿠키가 수정된 것을 볼 수 있다.
- 쿠키 삭제는 setMaxAge(0);으로 해주면 된다. setMaxAge(n); 는 생명주기를 n초로 정해주는 메소드인데, 0초로 해주면 실행시키는 동시에 바로 생명주기가 끝나 삭제가 된다.
- 수정과 같이 이것도 역시 다시 사용자 컴퓨터에 저장해 줘야 진짜로 삭제가 되는 것이다.
- 출력된 것을 보면 쿠키가 삭제된 것도 볼 수가 있다.
- 생명주기는 기본적으로 음수로 설정되어 있는데 음수는 브라우저 종료시 쿠키를 삭제하는 것을 의미한다.
- setMaxAge(60*60*24*30*12); 은 생명주기를 1년을 의미한다. 즉, 쿠키를 저장한 후 1년동안 삭제 되지 않고 유지된다는 뜻이다.
'웹개발 > JSP' 카테고리의 다른 글
[JSP] Ajax(Asynchronous Javascript and XML), GET/POST 방식 (0) | 2022.05.25 |
---|---|
[JSP] 세션(Session) (0) | 2022.05.23 |
[JSP] 내장 객체, Form 유효성 검사 및 예제 (0) | 2022.05.22 |
[JSP] 액션 태그 (0) | 2022.05.20 |
[JSP] 디렉티브 태그(Directive Tag) (0) | 2022.05.20 |