티스토리 뷰

Web(국비)/DB연결

[Java]Cookie란?

Xion 2019. 10. 30. 10:12

■■■ 세션과 쿠키 ■■■



○세션(Session)
 
  - 쿠키의 경우 브라우저에 상태를 유지하기 위한 정보를 저장하지만
   (즉,로컬 PC의 하드디스크에 저장)
   세션은 웹 서버의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장하는 것으로
   『javax.sevlet.http』 패키지의 『HttpSession』 인터페이스를 통해
   세션을 사용하게 된다.
   또한 세션은 서버와 관련된 정보를 노출하지 않기 때문에
   쿠키를 사용하는 것 보다 HttpSession인터페이스의 세션을 통한 상태 관리가
   보다 안정적(보안성 향상)이라 할 수 있다.

  -Session 생성
   Session을 생성하기 위해서는 페이지 디렉티브(page directive)의
   session속성을 true로 설정한다.
   (별도로 설정하지 않아도 자동으로 기본값 적용. 
    즉,사용하지 않을 경우에만 false로 설정한다.)
   ex) <%@ page session="true"%>

  -Session 내장 객체의 주요 메소드
    ㆍString getId()
      :Session의 고유 ID 값을 구한다.
     (『세션 아이디』 라고 한다. 세션 고유 아이디를 문자열 형태로 반환한다.)
    ㆍlong getCreationTime()
      :세션이 생성된 시간을 구한다.
      (시간은 1970년 1월 1일 이후 흘러간 시간을 의미한다.)
    ㆍlong getLastAccessedTime()
      :웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다.
    ㆍint getMaxIncaterval()
      :세션 유지 시간을 초로 반환한다. 기본값은 30분으로 지정된다.
    ㆍvoid setMaxInactiveInterval(int interval)
      :세션을 유지할 시간을 interval 에 설정된 초 값으로 설정한다.
    ㆍvoid invalidate()
      :현재 세션을 종료한다.
       세션과 관련된 모든 값을 삭제한다.
    ㆍboolean isNew()
      :클라이언트 『세션 아이디』를 할당하지 않은 경우 『true』값을 반환한다.
       새로운 세션인지의 여부를 확인할 때 사용한다.
    ㆍvoid setAttribute(String key, Object value)
      :주어진 key속성의 값을 value로 지정한다.
    ㆍObject getAttribute(String key)
      :주어진 key속성의 값을 얻어낸다.
    ㆍvoid removeAttribute(String key)
      :주어진 key속성의 값을 제거한다.

  -한 번 생성된 세션은 종료하기 전까지 지속적으로 유지된다. (중간에 사라지지 않음)
   은행 인터넷 뱅킹 이용 시 로그인이 풀리는 이유는 임의로 설정을 해 두었기 때문이다.
   이와 같은 성격으로 웹 어플리케이션을 실행하는 동안 지속적으로 사용하는 데이터의
   저장 장소로는 세션이 적합(적당)하다.

○쿠키(Cookie)

  - 쿠키는 클라이언트에 대한 정보를 클라이언트의 하드디스크에 작은 파일 형태로 저장한 
    text파일로 서버에서 사용자에게 편리한 기능을 제공하기 위해 많이 사용되고 ,
    쿠키는 웹 브라우저에 의해 관리된다.

  - 쿠키는 텍스트 형태로 저장되기 때문에 변조나 복사 등이 가능하여 보안성이 없고
    클라이언트에... 예전에는 총 300개 까지 저장 가능했으며,
    각 도메인 당 갯수 제한(20개)이나 크기 제한 (4096Byte)은 사실상 무의미해져 가고 있다.

  - 저장되는 위치는 시스템(운영체제)이나 브라우저에 따라 다르며 일반적인 형식은
    『계정명@도메인』이었으나, 이 또한 바뀌고 있다.

  - 쿠키는 웹 브라우저가 거쳐간 웹 사이트 및 개인의 정보가 기록되기 때문에 개인의
    사생활을 침해할 소지가 있으며,이로 인한 보안 문제를 유발하기 때문에 일반적으로
    웹 브라우저 자체에 쿠키 거부 기능이 포함되어 있다.
    하지만, 쿠키 거부 기능을 설정하게 되면 웹 브라우저와의 연결을 지속시키지
    못하기 때문에 문제가 발생한다.
    (사실상 거부는 의미가 없엄 , . 반 강제적)
    
  -쿠키의 동작 방식
   쿠키의 동작 방식은 웹 서버와 웹 브라우저 간의 상호 협력으로 이루어진다.
   웹 서버가 웹 브라우저의 요청에 응답할 때
   HTTP 프로토콜에 있는 HTTP헤더에 쿠키 정보를 포함시켜서 클라이언트 쪽으로 보낸다.
   그리고 웹 브라우저가 웹 서버에 존재하는 페이지를 요구할 때
   그 전에 자신이 방문했을 때 해당 페이지에 대해 웹 서버가 웹 브라우저 쪽으로
   심어놓은 쿠키를 웹 서버로 다시 건네주어서 이전 상태를 웹 서버가
   알 수 있도록 하낟.

  -쿠키(객체)의 파라미터(속성)
   ㆍname=value
     :쿠키는 반드시 이름을 포함해야 한다.
      이름은 변수명과 같은 목적으로 사용된다.
   ㆍexpires=date
     :유효기간을 지정한다. 
      날짜를 생략할 경우 브라우저의 종료 시점까지 쿠키가 남아있게 된다.
      유효기간 설정은 그리니치 표준시(Wdy, DD-Mon-TT HH:MM:SS GNT)로 설정하게 된다.   
   ㆍpath=path
     :웹 서버에서 쿠키 값이 디렉터리 간에 유효한 범위를 설정하는 것으로
      path 값은 웹 서버의 document root를 기준으로 설정한다.
      예를 들어... path가 『/』 이면 (『"path=/;"』) 도메인 루트(/) 에서 시작하는
      모든 곳을 접속할 때 해당 쿠키의 값을 적용할 수 있다,
      생략할 경우 현재 문서의 위치와 티렉터리와 하위 디렉터리가
      쿠키의 범위가 된다.
   ㆍdomain=domain
     :한 사이트에서 만든 쿠키가 다른 사이트에 영향을 주지 않기 때문에
      도메인 항목이 필요하다.
      도메인은 자동으로 사이트의 기본 도메인으로 설정된다.
    ㆍsecure
     :데이터의 전송 보안이 요구되는지를 지정한다.
      true는 브라우저가 안전하다고 판한하는 서버만 나타나게 된다.
      기본값(default)은 false이다.
   
    -쿠키의 기본 설정
     ①Cookie 객체 생성
       Cookie c= new Cookie("쿠키이름", "쿠키값");
     ②Cookie객체 설정
       c.setMaxAge(쿠키 유효시간 초 단위 설정);
     ③Cookie객체 등록(추가)
       response.addCookie(c);
     

    - JSP 에서 쿠키를 설정하는 방법은 두 가지가 있다.

      ①번째 방법
      『response』객체에 『setHeader()』메소드를 이용하여 쿠키를 설정하는 것이다.
      하지만, 권장하지 않는다.
      ex)response.setHeader("set_cookie", "name=value, expires=value, ...");
         //-- 이 방법은 ...
         // Header에 key와 value ...을
         // String Type으로 넘기는 것이기 때문에
         // 엄밀히 말하자면 쿠키라는 객체를 넘기는 것이 아니다.
         // 과거에는 쿠키라는 클래스가 존재하지 않았기 때문에 이 방법을 이용했다.
      
      ②번째 방법
      『Cookie』클래스를 이용하는 방법이다.
       ㆍString getComment()
         : 쿠키에 대한 설명을 가져온다.
       ㆍString getDomain()
         : 쿠키가 유효한 도메인 정보를 가져온다.
       ㆍint getMaxAge()
         : 쿠키의 유효한 시간 정보를 가져온다.
       ㆍString getName()
         : 쿠키의 이름을 가져온다.
       ㆍString getPath()
         : 쿠키의 유효한 디렉터리 정보를 가져온다.
       ㆍboolean getSecure()
         : 쿠키의 보안 설정값을 가져온다.
       ㆍString getValue()
         : 쿠키의 해당 값을 가져온다.
       ㆍint getVersion()
         : 쿠키의 버전 값을 가져온다.
       ㆍvoid setComment(String purpose)
         :쿠키에 대한 설명을 설정한다.
       ㆍvoid setDomain(String pattern)
         : 쿠키가 유효한 도메인 정보를 설정한다.
       ㆍvoid setSecure(String url)
         : 쿠키가 유효한 시간 정보를 설정한다
       ㆍvoid setValue(String newValue)
         : 쿠키의 해당 값을 설정한다.
       ㆍvoid setVersion(int v)
         :쿠키의 버전 값을 설정한다.

     - JSP 에서 쿠키 유요 시간 설정
       『setMaxAge(int expiry)』메소드를 통해 유효시간을 설정한다
       ㆍ『expiry』가 음수 일때
         : 브라우저가 종료되면 쿠키가 제거된다.

       ㆍ『expiry』가 0 일때
         : 생성과 동시에 쿠키가 제거된다.

       ㆍ『expiry』가 양수 일때
         :초 단위로 해당 시간만큼 쿠키가 유지된다.

       ㆍ『setMaxAge()』메소드를 통해 유효시간을 설정하지 않은 경우
         기본값으로 음수가 설정되어 브라우저가 종료될 때 까지 쿠키가 유지된다.


 ※참고
    -스코트(scope) ->대부분의 교재에서 life cycle(생명주기)로 설명함.
     웹 어플리케이션은 page, request, session , applcation이라는
     4개의 영역(객체)를 가지고 있으며 기본 객체의 영역은 객체의 유효기간이라고도 불리며
     객체를 누구와 공유할 것인가를 나타낸다.
      
      ㆍpage 영역
  한 번의 웹 브라우저(클라이언트)의 요청에 대해
하나의 JSP페이지가 호출되면
웹 브라우저의 요청이 들어오면
이때... 단 한 개의 페이지만 대응된다.

      ㆍrequest영역
한 번의 웹 브라우저(클라이언트)의 요청에 대해
        요청을 공유하는 페이지가 대응되며
        웹 브라우저의 한 번의 요청이 단지 한개의 페이지만 요청될 수 있고
        같은 request 영역이면 두 개의 페이지가 같은 요청을 공유한다.
        (inclued 액션 태크, forward 액션 태그 사용 시)

      ㆍsession영역
하나의 웹 브라우저 당 한 개의 세션 객체가 생성된다.
같은 웹 브라우저 내에서는 요청되는 페이지들이 같은 객체를 공유한다.

      ㆍapplication영역
하나의 웹 어플리케이션 당 한개의 어플리케이션 객체가 생성된다.
대부분 환경 설정에서 사용된다.
같은 웹 어플리 케이션에 요청되는 페이지들은 같은 객체를 공유한다.

'Web(국비) > DB연결' 카테고리의 다른 글

[JAVA]-BEAN  (0) 2019.10.29
DB연결-WebApp09  (0) 2019.10.28
DB-연결 WebApp08  (0) 2019.10.28
[Java] score DB연결  (0) 2019.10.28
DB연결1  (0) 2019.10.27