Language/Java

Session 과 Cookie

addmean 2024. 6. 15. 07:00

[ 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