570 likes | 900 Views
6. 쿠키와 세션. 학습목표 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다 . 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자 . 내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession. 1. 쿠키와 세션 (1). 세션 (Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간 예 : 홈쇼핑 사이트에서의 로그인과 로그아웃
E N D
6 쿠키와 세션
학습목표 • 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다. 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자. • 내 용 • 쿠키와 세션 • 쿠키 기술 • 세션 기술 / HttpSession
1. 쿠키와 세션 (1) • 세션(Session) - 정의 • 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간 • 예: 홈쇼핑 사이트에서의 로그인과 로그아웃 • 일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행하면서 클라이언트와의 연결 상태를 유지시키는 개념 • HTTP 프로토콜은 비연결지향(Connection-less) 프로토콜 • 웹 서버는 한 클라이언트의 세션 상태를 유지하기 위한 메커니즘이 요구됨 • 쿠키(cookie) 기술 – 세션 관련 정보를 클라이언트에 저장 • 세션(Session) 기술 – 세션 관련 정보를 웹 서버에 저장
1. 쿠키와 세션 (2) • 쿠키(Cookie) 기술 • 쿠키 (Cookie) – 웹 서버와 클라이언트가 주고받는 작은 데이터 조각 • 웹 서버가 웹 브라우저로 쿠키(데이터)를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는 방법을 통해 세션 상태를 유지 • 첫 번째 웹 컴포넌트는 웹 브라우저로 HTML문서를 보낼 때 전달한 데이터를 함께 보내며, 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 URL과 함께 웹 서버로 보낸다. [그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달
1. 쿠키와 세션 (3) • 세션(Session) 기술 • 웹 서버에서 별도의 세션 객체에 세션 상태 정보를 저장 및 관리 • 동일한 세션에서 실행되는 웹 컴포넌트 간에 세션 객체를 공유하여 데이터 전달 • 첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고, 그 데이터를 읽기 위해 필요한 세션 아이디만 웹 브라우저로 보낸다. • 웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로 보내며, 그 아이디를 이용하면 저장된 데이터를 찾을 수 있다 [그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달
2. 쿠키 기술 (1) • 쿠키 생성 및 저장 (1) • 쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일 • 첫째 : Cookie 클래스의 객체를 생성한다. • 둘째 : response 클래스의 addCookie() 메서드를 호출하여 응답 메시지에 쿠키를 추가한다. • 쿠키 객체 생성 • Cookie 클래스는 javax.servlet.http패키지에 속하며, 이 클래스의 객체를 만들 때는 쿠키의 이름과 값을 파라미터로 넘겨줘야 한다. • 파라미터는 모두 String 타입이므로, 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서 넘겨줘야 한다. 쿠키 이름 쿠키 값
2. 쿠키 기술 (2) • 쿠키 생성 및 저장 (2) • 쿠키 추가 • Response 클래스의 addCookie()메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다. • 응답 메시지에 쿠키를 저장하기 위해 response객체에 대해 addCookie() 메소드를 호출,Cookie객체를 파라미터로 넘겨줘야 한다. • addCookie() 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가 하도록 되어 있다. • 웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다. Cookie 객체
2. 쿠키 기술 (3) • 쿠키 생성 및 저장 (3) • 웹 브라우저 쪽에 쿠키 데이터를 저장하는 JSP 페이지 [그림 4-5] 예제 4-1의 실행 결과
2. 쿠키 기술 (4) • 쿠키 생성 및 저장 (4) • 쿠키 데이터를 저장된응답 메시지 • 교제 pp.202 HTTP 응답 메시지 참조
2. 쿠키 기술 (5) • 쿠키 조회 (1) • 웹 브라우저는 웹 서버로 요청을 보낼 때 마다 URL에 포함된 웹 서버의 주소에 해당하는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다. • 서블릿(또는 JSP)는 웹 브라우저가 보내온 요청 메시지로 부터 쿠키 데이터를 읽어와 세션 상태 정보를 인식하고 처리하도록 한다. • Request 객체에 대해 getCookies()메서드를이용하여 쿠키 데이터를 조회할 수 있다. • getCookies()메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie배열로 만들어서 반환하기 때문에 다음과 같은 Cookie배열 변수에 반환값을 받아야 한다. 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 리턴하는메서드
2. 쿠키 기술 (6) • 쿠키 조회 (2) • 쿠키 이름 조회 - Cookie객체에 대해 getName()메서드를 호출하여 조회 • 쿠키 값 조회 - 원하는 이름의 Cookie객체를 찾은 다음에는 그 객체에 대해 getValue()메서드를 호출해서 쿠키 값을 조회 쿠키 이름을 가져오는 메서드 쿠키 값을 가져오는 메서드
2. 쿠키 기술 (7) • 쿠키 조회 (3) - 예제
2. 쿠키 기술 (8) • 쿠키 조회 (4) - 예제 웹 브라우저를 종료한 후에 서블릿을 요청한 경우 앞의 예제와 연속하여 실행하는 경우 [그림 4-6] 예제 4-2의 실행 결과(1) [그림 4-7] 예제 4-2의 실행 결과(2)
2. 쿠키 기술 (9) • 쿠키 수정 (1) • 웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할 때와 마찬가지로 수정된 값을 가진 Cookie객체를 생성하여 addCookie()메서드로 넘겨주면 된다. ModifyCookie.jsp
2. 쿠키 기술 (10) • 쿠키 수정 (2) [그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법
2. 쿠키 기술 (11) • 쿠키 삭제 (1) • 쿠키 기술에서 데이터를 삭제하기 위해서는 쿠키의 남은 수명을 0으로 설정하는 방법을 사용해야 한다. • 쿠키의 수명을 설정하기 위해서는 addCookie()메서드를 호출하기 전에 Cookie객체에 대해 setMaxAge() 메서드를 호출하면 된다. • 초단위의 값을 넘겨줘야 하므로, 1시간 후에 쿠키가 지워지도록 만들려면 다음과 같은 값을 넘겨줘야 한다. • setMaxAge()메서드에0이나 마이너스 값을 넘겨줄 수도 있다. 쿠키의 최대 수명(초 단위) 웹 브라우저가 끝날 때 쿠키가 삭제되도록 만드는 값 쿠키를 바로 삭제하도록 만드는 값
2. 쿠키 기술 (12) • 쿠키 삭제 (2) • Cookie객체에 대해 setMaxAge()메서드 호출에 의해 설정된 쿠키 수명 값은 쿠키 데이터의 ‘Expires’ 옵션으로 설정된다. • ‘Expires=Wdy, DD-Mon-YY HH:MM:SS GMT’ • 예: “Set-Cookie: BLOOD_TYPE=O; Expires=Fri, 09-Jul-2010 12:36:09 GMT”
2. 쿠키 기술 (13) • 쿠키 삭제 (2) - 예제 • 웹 애플리케이션 디렉터리에 DeleteGookie.jsp라는 이름으로 저장한다.
2. 쿠키 기술 (14) • 쿠키 삭제 (3) - 예제 [그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법
2. 쿠키 기술 (15) • 쿠키 옵션 설정 – “Path” 옵션 (1) • Path 옵션은 쿠키가 특정 경로명을 갖는 URL에 대한 요청에만 전송하도록 설정 • 웹 브라우저는 웹 서버로 URL을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적인 동작이지만, addCookie()메서드를 호출하기 전에 Cookie객체에 대해 setPath()메서드를 통해 path 옵션을 설정하여 쿠키의 전송 범위를 한정시킬 수 있다. • setPath()메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL경로명을 파라미터로 넘겨줘야 한다. • setPath()메서드에 넘겨주는 URL경로명은 반드시 ‘/’로 시작해야 하고 마지막도 ‘/’로 끝내는 것이 좋다. 쿠키를 전송할 URL 경로명
2. 쿠키 기술 (16) • 쿠키 옵션 설정 – “Path” 옵션 (2)
2. 쿠키 기술 (17) • 쿠키 옵션 설정 – “Path” 옵션 (3)
2. 쿠키 기술 (18) • 쿠키 옵션 설정 – “Path” 옵션 (4) • sub1디렉터리에 있는 JSP페이지는 [예제 4-5]가 저장한 JOB쿠키를 받을 수 있지만, sub2디렉터리에 있는 JSP 페이지는 받을 수 없다. [그림 4-12] 예제 4-5의 실행 결과
2. 쿠키 기술 (19) • 쿠키 옵션 설정 – “Domain” 옵션 (1) • 쿠기의‘Domain’ 옵션은 쿠키가 같은 도메인의 여러 웹 서버로 전송이 가능하도록 함 • 웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie()메서드를 호출하기 전에 Cookie객체에 대해 setDomain()메서드를 호출하여 도메인 옵션을 설정하도록 한다. 쿠키를 받을 도메인 [그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위
2. 쿠키 기술 (20) • 쿠키 옵션 설정 – “Domain” 옵션 (2) • 다음 두 예제는 setDomain()메서드의 사용 예
2. 쿠키 기술 (21) • 쿠키 옵션 설정 – “Domain” 옵션 (3)
2. 쿠키 기술 (22) • 쿠키 옵션 설정 – “Domain” 옵션 (4) • 앞의 두 JSP페이지는 같은 도메인에 속하는 서로 다른 웹 서버에 설치해야 한다. • [예제 4-7]을 한 쪽 웹 서버에 StoreIDCookie.jsp라는 이름으로 저장하고, [예제 4-8]을 다른 쪽 웹 서버에 ReadIDCookie.jsp라는 이름으로 저장한 후 실행하면 다음과 같은 결과가 나온다. ①첫 번째 웹 서버에 설치한 [예제 4-7]의URL을 입력하세요. ② 두 번째 웹 서버에 설치한 [예제 4-8]의 URL을 입력하세요 [그림 4-15] 예제 4-7, 4-8의실행 결과
3. 세션 기술 (1) • 세션 동작 방식 (1)
3. 세션 기술 (2) • 세션 동작 방식 (2)
3. 세션 기술 (3) • 세션 동작 방식 (3)
3. 세션 기술 (4) • 세션 동작 방식 (4)
3. 세션 기술 (5) • 세션 ID (1) • 컨테이너는 클라이언트를 어떻게 식별하는가? • 세션 ID(Session ID) • 클라이언트별로 유일한 세션 ID(Session ID)를 부여하여 식별 • 클라이언트의 처음 요청이 들어오면 세션 ID를 생성하여 응답 메시지로 전달
3. 세션 기술 (6) • 세션 ID (2) • 세션 ID(Session ID) • 클라이언트는 두번째 요청부터 세션 ID를 요청 전송 시에 웹 서버에 보내고, 웹 서버에서는 세션 ID가 일치하는 세션을 찾아 요청과 연결한다.
3. 세션 기술 (7) • 세션 ID (3) • 세션 ID 공유 방법 – 쿠키(JSESSIONID) 사용
3. 세션 기술 (8) • 세션 ID (4) • 세션 ID 공유 방법 – 쿠키(JSESSIONID) 사용 • 세션 기술에서는 웹 브라우저로 세션 ID를 보낼 때 쿠키 형태로 만들어서 전송 • 쿠키 이름은 JSESSIONID [그림 4-23] 쿠키 형태로 전송되는 세션 아이디
3. 세션 기술 (9) • 세션 ID (5) • 세션 ID 공유 방법 – URL 재작성 방법 • 클라이언트가 쿠키를 지원하지 않을 경우
3. 세션 기술 (10) • 세션 객체 생성 (1) • 서블릿 클래스에서 세션 객체를 접근하기 위해 Request 객체에 대해 getSession() 메서드를 호출 • getSession()메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession타입의 객체를 반환 • getSession() 메소드 동작에 유의 • 세션 객체 생성 및 세션 ID 쿠키와 관련된 모든 작업은 컨테이너가 수행 • 요청 메시지에 세션 ID 쿠키가 없으면 새로운 세션 객체를 생성하고 그 객체를 반환 • 새로운 세션 ID를 생성하고 Response에 세션 ID 쿠키까지 설정 • 요청 메시지에 세션 ID 쿠키가 있으면 세션 ID와일치하는 세션 객체가 검색하여 반환 • 만약 세션 ID와일치하는 세션 객체가 없는 경우 새롭게 세션 객체를 생성 세션 객체를 접근하는 메서드
3. 세션 기술 (11) • 세션 객체 생성 (2) • 새롭게 생성된 세션 객체의 식별 • 이미 생성되어 있는 세션에 대한 접근 : HttpSession session = request.getSession(); if (session.isNew()) { out.println(“This is a new session”); } else { out.println(“Welcome Back!”); } : : HttpSession session = request.getSession(false); if (session == null) { out.println(“no session was available… making one….”); session = request.getSession(); } else { out.println(“There was a session”); } :
3. 세션 기술 (12) • 세션 객체의속성 설정 (1) • 세션 객체에는 속성(Attribute)를 설정할 수 있다. • 세션 객체를 접근하는 웹 컴포넌트 사이에 데이터를 공유 가능 • getAttribute() 메서드를 이용하여 속성 조회 • 주의: getAttribute()메서드의 리턴 타입은 java.lang.Object이므로 데이터 값을 본래의 타입으로 사용하려면 원하는 클래스로 캐스트 연산을 해야 한다. 속성 이름 속성 값 캐스트 연산자 속성 이름
3. 세션 기술 (13) • 세션 객체의속성 설정 (2) • 세션 객체에서의 속성 제거 • removeAttribute()메서드를 이용하여 속성 제거 속성 이름
3. 세션 기술 (14) • 세션 객체 제거 (1) • 세션의 비활성화 세션 제거
3. 세션 기술 (15) • 세션 객체 제거 (2) • 세션의 비활성화 세션 제거
3. 세션 기술 (16) • 세션 객체 제거 (3) • 세션이 종료되는 세가지 경우 • 세션 타임 아웃 – 설정된 허용 비활성화 시간을 넘긴 경우 • 서블릿에 의한 종료 – 세션 객체에 대해 invalidate() 메소드 호출 • 웹 애플리케이션의 종료 – 문제 발생으로 다운되거나 언디플로이(undeploy) 되는 경우 • 세션 타임아웃 설정 방법
3. 세션 기술 (17) • 세션 클래스(HttpSession) - 주요 메소드
3. 세션 기술 (18) • 세션 기술 – 예제 (1) 음식 이름을 입력하면 동물 이름 입력 화면이 나타나고 동물 이름을 입력하면 결과 화면이 나타납니다. [그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계
3. 세션 기술 (19) • 세션 기술 – 예제 (2) HTML 문서 [그림 4-17]의 첫 번째 화면의 URL 서블릿 클래스 [그림 4-17]의 두 번째 화면의 URL [그림 4-17]의 세 번째 화면의 URL
3. 세션 기술 (20) • 세션 기술 – 예제 (3)
3. 세션 기술 (21) • 세션 기술 – 예제 (4)
3. 세션 기술 (22) • 세션 기술 – 예제 (5)
3. 세션 기술 (22) • 세션 기술 – 예제 (6) [그림 4-19] 예제 4-9 예제 4-10, 예제 4-11의 실행 결과