Session 과 Cookie
[ SESSION ]
(1) 정의
- 세션은 웹서버쪽의 웹컨테이너에 상태를 유지하기 위한 정보를 저장
- javax.servlet.http 페키지의 HttpSession 인터페이스를 통해서 사용가능
- 서버와 관련된 정보를 노출시키지 않기 위해서 쿠키를 사용하는 것보다
HttpSession인터페이스를 통한 상태관리가 더욱 효율적
- 웹브라우저당 1개씩 생성되어 웹컨테이너에 저장
- 서버는 각각의 클라이언트로 부터 발생한 요청에 대해서 특정한 ID를 부여
(이 ID를 클라이언트에서 발생한 요청들과 비교해서 같은 ID인지를 구별하여,
이 ID라는 식별자에 특정한 값을 넣을 수도 있다)
- session객체는 웹브라우저와 매핑되므로 해당 웹브라우저를 닫지 않는 한
같은 창에서 열려진 페이지는 모두 같은 session객체를 공유하게됨
(2) 세션 속성
1) Session 객체의 메소드
① getAttribute(java.lang.String name)
- 리턴타입 : java.lang.Object
- name이란 이름에 해당되는 속성값을 Object타입으로 반환
- 해당되는 이름이 없을 경우 null값을 반환
- 세션의 속성을 사용할때 사용 : 예)String i = (String)session.getAttribute("memId");
② getAttributeNames()
- 리턴타입 : java.util.Enumeration
- 속성의 이름들을 Enumeration 객체 타입으로 반환
③ getCreationTime()
- 리턴타입 : long
- 1970년 1월 1일 자정을 기준으로 하여 현재 세션이 생성된 시간까지 지난 시간을 계산하여1/1000초로 반환
④ getId()
- 리턴타입 : java.lang.String
- 세션에 할당된 고유ID를 String타입으로 반환
⑤ getMaxInactiveInterval()
- 리턴타입 : int
- 현재 생성된 세션을 유지하기 위해 설정된 최대 시간을 정수형을 반환
⑥ invalidate()
- 리턴타입 : void()
- 현재 생성된 세션을 무효화 시킴
- 예) session.invalidate();
⑦ removeAttribute(java.lang.String name)
- 리턴타입 : void
- name으로 지정한 속성의 값을 제거
- 예) session.removeAttribute("memId");
⑧ setAttribute(java.lang.String name, java.lang.Objecct value)
- 리턴타입 : void
- name으로 지정한 이름에 value값을 할당
- 예) session.setAttribute("memId","test");
⑨ setMaxInactiveInterval(int interval)
- 리턴타입 : void
- 세션의 최대 유지시간을 초 단위로 설정
[COOKIE ]
1) 정의
- 상태가 없는 프로토콜을 위해 상태를 지속시키기 위한 방법
- 웹브라우저의 정보를 웹브라우저 자신들에게 저장
→ 이후 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 같이 포함되어서 전송된다
이때 웹서버는 웹브라우저의 요청 속에 포함되어 있을 쿠키를 읽어서
새로운 웹브라우저인지 이전에 요청을 했던 웹브라우저인지를 판단할 수 있다.
따라서 웹 브라우저를 통해서 특정 사이트에 접속하면 웹브라우저에 쿠키가 저장된다
- 본래 쿠키는 특정 웹사이트에 접속할 때 생성되는 정보를 담은 임시 파일로 크기는 4KB이하로 생성
- 그러나 쿠키는 웹브라우저가 거쳐 간 웹 사이트 및 개인의 정보가 기록되기 때문에
개인의 사생활을 침해할 소지가 있음
→ 보안 문제를 유발하기 때문에 웹브라우저 자체에 쿠키 거부 기능이 들어있는데
쿠키 거부 기능이 웹브라우저에 설정되어 있으면
쿠키 본래의 목적인 웹브라우저와의 연결을 지속시키는 기능을 수행할 수 없는데
이것이 쿠키의 가장 치명적인 단점
- 쿠키를 사용할 때는 javax.servlet.http패키지에 있는 Cookie 클래스를 이용하며
서블릿에서 만들어져 클라이언트의 브라우저에 의해 저장
- 서버는 쿠키값을 읽어서 같은 브라우저로부터 온 요청이라는 것을 인식하게 해서
각각의 클라이언트와의 상태를 지속시킬수 있음
(2) 쿠키 생성
① 정의
- 쿠키는 이름, 값, 유효기간, 도메인, 경로등으로 구성(이름, 값이 가장 중요한 구성요소)
→ 쿠키를 식별하기 위해 이름이 필요하며, 원하는 작업을 수행하려면 값을 가지고 있어야 하기 때문
- 쿠키이름 : 알파벳과 숫자로만 이루어져 있고, $로 시작할 수 없으며, 콤마, 세미콜론, 공백 등의
문자를 포함 불가
- 쿠키값 : 공백, 괄호, 등호, 콤마, 콜론, 세미콜론을 포함할 수 없으며 이들 값을 포함하려면
인코딩 필요
② 쿠키생성
Cookie cookie = new Cookie(String name, String value);
(name:쿠키이름,value:쿠키값)
③ 쿠키추가
response.addCookie(name); //쿠키추가
cookie.setValue(newValue); //쿠키이름에 대응하는 값을 새롭게 지정
④ 쿠키읽어오기
Cookie[] cookies = request.getCookies();
//웹브라우저에 저장된 쿠키를 모두 읽어오기 때문에 리턴타입이 Cookie[]
⑤ 쿠키지속시간
cookie.setMaxAge(int expiry);
//expiry는 초단위로 쿠키의 최대 수명을 설정, 이시간을 벗어난 쿠키는
사용기간이 만료된 쿠키로 분류(예.1주일로 설정→cookie.setMaxAge(7*24*60*60);
(3) 쿠키 작성
① 절차
1) 먼저 쿠키를 생성한다
2) 쿠키에 필요한 설정을 한다(쿠키의 유효시간, 쿠키에 대한 설명, 도메인, 패스, 보안 등)
3) 웹브라우저에 생성된 쿠키를 전송한다
② 웹브라우저에 저장된 쿠키를 사용하는 절차
1) 웹브라우저의 요청에서 쿠키를 얻어온다
2) 쿠키는 이름, 값의 쌍으로 된 배열 형태로 리턴된다.
리턴된 쿠키의 배열에서 쿠키 이름을 가져온다
3) 쿠키 이름을 통해서 해당 쿠키에 설정된 값을 추출한다
(4) 메소드
① getMaxAge()
- 리턴타입 : int
- 쿠키의 최대 지속 시간을 초단위로 지정
- -1일 경우 브라우저가 종료되는 쿠키를 만료
② getName()
- 리턴타입 : java.lang.String
- 쿠키의 이름을 스트링으로 반환
③ getValue()
- 리턴타입 : java.lang.String
- 쿠키의 값을 스크링으로 반환
④ setMaxAge(int expiry)
- 리턴타입 : void
- 쿠키의 만료시간을 초단위로 설정
⑤ Value(java.lang.String newValue)
- 리턴타입 : voidset
- 쿠키에 새로운 값을 설정할 때 사용
**이글은 복습을 위한 글입니다**
출처 : 이문희 강사님 https://cafe.naver.com/zipsy