57
JSP & Servlet 쿠쿠쿠 쿠쿠

쿠키와 세션

Embed Size (px)

DESCRIPTION

6. 쿠키와 세션. 학습목표 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다 . 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자 . 내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession. 1. 쿠키와 세션 (1). 세션 (Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간 예 : 홈쇼핑 사이트에서의 로그인과 로그아웃 - PowerPoint PPT Presentation

Citation preview

Page 1: 쿠키와 세션

JSP & Servlet

쿠키와 세션

Page 2: 쿠키와 세션

2/51

Contents

학습목표

셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이지나

서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다 . 이

장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자 .

내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession

Page 3: 쿠키와 세션

3/50

세션 (Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간

• 예 : 홈쇼핑 사이트에서의 로그인과 로그아웃

일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행하면서

클라이언트와의 연결 상태를 유지시키는 개념

• HTTP 프로토콜은 비연결지향 (Connection-less) 프로토콜

웹 서버는 한 클라이언트의 세션 상태를 유지하기 위한 메커니즘이 요구됨

• 쿠키 (cookie) 기술 – 세션 관련 정보를 클라이언트에 저장

• 세션 (Session) 기술 – 세션 관련 정보를 웹 서버에 저장

1. 쿠키와 세션 (1)

Page 4: 쿠키와 세션

4/50

쿠키 (Cookie) 기술 쿠키 (Cookie) – 웹 서버와 클라이언트가 주고받는 작은 데이터 조각

웹 서버가 웹 브라우저로 쿠키 ( 데이터 ) 를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는

방법을 통해 세션 상태를 유지

첫 번째 웹 컴포넌트는 웹 브라우저로 HTML 문서를 보낼 때 전달한 데이터를 함께

보내며 , 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때

URL 과 함께 웹 서버로 보낸다 .

1. 쿠키와 세션 (2)

[ 그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달

Page 5: 쿠키와 세션

5/50

세션 (Session) 기술 웹 서버에서 별도의 세션 객체에 세션 상태 정보를 저장 및 관리

• 동일한 세션에서 실행되는 웹 컴포넌트 간에 세션 객체를 공유하여 데이터 전달

첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고 , 그 데이터를 읽기 위해

필요한 세션 아이디만 웹 브라우저로 보낸다 .

웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로

보내며 , 그 아이디를 이용하면 저장된 데이터를 찾을 수 있다

1. 쿠키와 세션 (3)

[ 그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달

Page 6: 쿠키와 세션

6/50

쿠키 생성 및 저장 (1)

쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일

• 첫째 : Cookie 클래스의 객체를 생성한다 .

• 둘째 : response 클래스의 addCookie() 메서드를 호출하여 응답 메시지에 쿠키를 추가한다 .

쿠키 객체 생성

• Cookie 클래스는 javax.servlet.http 패키지에 속하며 , 이 클래스의 객체를 만들 때는 쿠키의

이름과 값을 파라미터로 넘겨줘야 한다 .

• 파라미터는 모두 String 타입이므로 , 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서

넘겨줘야 한다 .

2. 쿠키 기술 (1)

Cookie cookie = new Cookie( “AGE ”, “26 ”);

쿠키 이름 쿠키 값

Page 7: 쿠키와 세션

7/50

쿠키 생성 및 저장 (2)

쿠키 추가

• Response 클래스의 addCookie() 메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다 .

• 응답 메시지에 쿠키를 저장하기 위해 response 객체에 대해 addCookie() 메소드를 호출 ,

Cookie 객체를 파라미터로 넘겨줘야 한다 .

• addCookie() 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가

하도록 되어 있다 .

웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다 .

2. 쿠키 기술 (2)

response.addCookie(cookie);

Cookie 객체

Page 8: 쿠키와 세션

8/50

쿠키 생성 및 저장 (3)

웹 브라우저 쪽에 쿠키 데이터를 저장하는 JSP 페이지

2. 쿠키 기술 (3)

[ 예제 4-1] 쿠키 데이터를 저장하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% response.addCookie(new Cookie( “NAME ”, “John ”)); response.addCookie(new Cookie( “GENDER ”, “Male ”)); response.addCookie(new Cookie( “AGE ”, “15 ”)); %> <HTML> <HEAD><TITLE> 쿠키 데이터 저장하기 </TITLE></HEAD> <BODY> 쿠키 데이터가 저장되었습니다 .<BR><BR> </BODY> </HTML>

[ 그림 4-5] 예제 4-1 의 실행 결과

Page 9: 쿠키와 세션

9/50

쿠키 생성 및 저장 (4)

쿠키 데이터를 저장된 응답 메시지

• 교제 pp.202 HTTP 응답 메시지 참조

2. 쿠키 기술 (4)

Page 10: 쿠키와 세션

10/50

쿠키 조회 (1)

웹 브라우저는 웹 서버로 요청을 보낼 때 마다 URL 에 포함된 웹 서버의 주소에

해당하는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다 .

서블릿 ( 또는 JSP) 는 웹 브라우저가 보내온 요청 메시지로 부터 쿠키 데이터를 읽어와

세션 상태 정보를 인식하고 처리하도록 한다 .

Request 객체에 대해 getCookies() 메서드를 이용하여 쿠키 데이터를 조회할 수 있

다 .

getCookies() 메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서

반환하기 때문에 다음과 같은 Cookie 배열 변수에 반환값을 받아야 한다 .

2. 쿠키 기술 (5)

Cookie cookies[] = request.getCookies();

웹 브라우저가 보낸 모든 쿠키를Cookie 배열로 만들어서 리턴하는 메서드

Page 11: 쿠키와 세션

11/50

쿠키 조회 (2)

쿠키 이름 조회 - Cookie 객체에 대해 getName() 메서드를 호출하여 조회

쿠키 값 조회 - 원하는 이름의 Cookie 객체를 찾은 다음에는 그 객체에 대해 get-

Value() 메서드를 호출해서 쿠키 값을 조회

2. 쿠키 기술 (6)

String name = cookies[i].getName();

쿠키 이름을 가져오는 메서드

String value = cookie[i].getValue();

쿠키 값을 가져오는 메서드

Page 12: 쿠키와 세션

12/50

쿠키 조회 (3) - 예제

2. 쿠키 기술 (7)

[ 예제 4-2] 쿠키 데이터를 읽는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie[] cookies = request.getCookies(); %> <HTML> <HEAD><TITLE> 쿠키 데이터 읽기 </TITLE></HEAD> <BODY> 이름 : <%= getCookieValue(cookies, “NAME ”) %> <BR> 성별 : <%= getCookieValue(cookies, “GENDER ”) %> <BR> 나이 : <%= getCookieValue(cookies, “AGE ”) %> </BODY> </HTML> <%! private String getCookieValue(Cookie[] cookies, String name) { String value = null; if (cookies == null) return null; for (Cookie cookie : cookies) { if (cookie.getName().equals(name)) return cookie.getValue(); } return null; } %>>

Page 13: 쿠키와 세션

13/50

쿠키 조회 (4) - 예제

2. 쿠키 기술 (8)

[ 그림 4-6] 예제 4-2 의 실행 결과 (1) [ 그림 4-7] 예제 4-2 의 실행 결과 (2)

앞의 예제와 연속하여 실행하는 경우웹 브라우저를 종료한 후에

서블릿을 요청한 경우

Page 14: 쿠키와 세션

14/50

쿠키 수정 (1)

웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할

때와 마찬가지로 수정된 값을 가진 Cookie 객체를 생성하여 addCookie() 메서드로

넘겨주면 된다 .

2. 쿠키 기술 (9)

[ 예제 4-3] 쿠키 데이터의 값을 수정하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%>

<% response.addCookie(new Cookie( “AGE ”, “16 ”)); %>

<HTML>

<HEAD><TITLE> 쿠키 데이터 수정하기 </TITLE></HEAD>

<BODY>

AGE 쿠키에 새로운 값이 저장되었습니다 .<BR><BR>

</BODY>

</HTML>

ModifyCookie.jsp

Page 15: 쿠키와 세션

15/50

쿠키 수정 (2)

2. 쿠키 기술 (10)

[ 그림 4-9] 예제 4-3 의 실행 결과를 확인하는 방법

Page 16: 쿠키와 세션

16/50

쿠키 삭제 (1)

쿠키 기술에서 데이터를 삭제하기 위해서는 쿠키의 남은 수명을 0 으로 설정하는 방법을

사용해야 한다 .

쿠키의 수명을 설정하기 위해서는 addCookie() 메서드를 호출하기 전에 Cookie

객체에 대해 setMaxAge() 메서드를 호출하면 된다 .

• 초단위의 값을 넘겨줘야 하므로 , 1 시간 후에 쿠키가 지워지도록 만들려면 다음과 같은 값을

넘겨줘야 한다 .

• setMaxAge() 메서드에 0 이나 마이너스 값을 넘겨줄 수도 있다 .

2. 쿠키 기술 (11)

cookie.setMaxAge(3600);

쿠키의 최대 수명 ( 초 단위 )

cookie.setMaxAge(0);

쿠키를 바로 삭제하도록만드는 값

cookie.setMaxAge(-1);

웹 브라우저가 끝날 때쿠키가 삭제되도록 만드는 값

Page 17: 쿠키와 세션

17/50

쿠키 삭제 (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. 쿠키 기술 (12)

Page 18: 쿠키와 세션

18/50

쿠키 삭제 (2) - 예제

• 웹 애플리케이션 디렉터리에 DeleteGookie.jsp 라는 이름으로 저장한다 .

2. 쿠키 기술 (13)

[ 예제 4-4] 쿠키를 삭제하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie cookie = new Cookie( “GENDER ”, ””); cookie.setMaxAge(0); response.addCookie(cookie); %> <HTML> <HEAD><TITLE> 쿠키 삭제하기 </TITLE></HEAD> <BODY> GENDER 쿠키가 삭제되었습니다 . </BODY> </HTML>

Page 19: 쿠키와 세션

19/50

쿠키 삭제 (3) - 예제

2. 쿠키 기술 (14)

[ 그림 4-10] 예제 4-4 의 실행 결과를 확인하는 방법

Page 20: 쿠키와 세션

20/50

쿠키 옵션 설정 – “ Path” 옵션 (1) Path 옵션은 쿠키가 특정 경로명을 갖는 URL 에 대한 요청에만 전송하도록 설정

• 웹 브라우저는 웹 서버로 URL 을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적인 동작이지만 , addCookie() 메서드를 호출하기 전에 Cookie 객체에 대해 setPath() 메서드를 통해 path 옵션을 설정하여 쿠키의 전송 범위를 한정시킬 수 있다 .

setPath() 메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명을

파라미터로 넘겨줘야 한다 .

setPath() 메서드에 넘겨주는 URL 경로명은 반드시 ‘ /’ 로 시작해야 하고 마지막도

‘ /’ 로 끝내는 것이 좋다 .

2. 쿠키 기술 (15)

cookie.setPath( “/brain04/sub1/ ”);

쿠키를 전송할 URL 경로명

Page 21: 쿠키와 세션

21/50

쿠키 옵션 설정 – “ Path” 옵션 (2)

2. 쿠키 기술 (16)

[ 예제 4-5] URL 경로명을 지정한 쿠키를 저장하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie cookie = new Cookie( “JOB ”, ”programmer ”); cookie.setPath( “/brain04/sub1/ ”); response.addCookie(cookie); %> <HTML> <HEAD><TITLE> 쿠키 데이터 저장하기 </TITLE></HEAD> <BODY> JOB 쿠키가 저장되었습니다 . <BR><BR> </BODY> </HTML>

Page 22: 쿠키와 세션

22/50

쿠키 옵션 설정 – “ Path” 옵션 (3)

2. 쿠키 기술 (17)

[ 예제 4-6] JOB 쿠키의 값을 출력하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie[] cookies = request.getCookies(); %> <HTML> <HEAD><TITLE> 쿠키 데이터 읽기 </TITLE></HEAD> <BODY> JOB: <%= getCookieValue(cookies, “JOB ”) %> <BR> </BODY> </HTML> <%! private String getCookieValue(Cookie[] cookies, String name) { String value = null; if (cookies == null) return null; for (Cookie cookie : cookies) { if (cookie.getName().equals(name)) return cookie.getValue(); } return null; } %>

Page 23: 쿠키와 세션

23/50

쿠키 옵션 설정 – “ Path” 옵션 (4)

sub1 디렉터리에 있는 JSP 페이지는 [ 예제 4-5] 가 저장한 JOB 쿠키를 받을 수

있지만 , sub2 디렉터리에 있는 JSP 페이지는 받을 수 없다 .

2. 쿠키 기술 (18)

[ 그림 4-12] 예제 4-5 의 실행 결과

Page 24: 쿠키와 세션

24/50

쿠키 옵션 설정 – “ Domain” 옵션 (1) 쿠기의 ‘ Domain’ 옵션은 쿠키가 같은 도메인의 여러 웹 서버로 전송이 가능하도록 함

웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie() 메서드를

호출하기 전에 Cookie 객체에 대해 setDomain() 메서드를 호출하여 도메인 옵션을

설정하도록 한다 .

2. 쿠키 기술 (19)

cookie.setDomain( “.hanb.co.kr ”);

쿠키를 받을 도메인

[ 그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위

Page 25: 쿠키와 세션

25/50

쿠키 옵션 설정 – “ Domain” 옵션 (2)

다음 두 예제는 setDomain() 메서드의 사용 예

2. 쿠키 기술 (20)

[ 예제 4-7] 도메인을 지정한 쿠키를 저장하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie cookie = new Cookie( “LOGIN_ID ”, ”lion2010 ”); cookie.setDomain( “.hanb.co.kr ”); response.addCookie(cookie); %> <HTML> <HEAD><TITLE> 쿠키 데이터 저장하기 </TITLE></HEAD> <BODY> LOGIN_ID 쿠키가 저장되었습니다 . </BODY> </HTML>

Page 26: 쿠키와 세션

26/50

쿠키 옵션 설정 – “ Domain” 옵션 (3)

2. 쿠키 기술 (21)

[ 예제 4-8] LOGIN_ID 쿠키의 값을 출력하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% Cookie[] cookies = request.getCookies(); %> <HTML> <HEAD><TITLE> 쿠키 데이터 읽기 </TITLE></HEAD> <BODY> LOGIN_ID: <%= getCookieValue(cookies, “LOGIN_ID ”) %> </BODY> </HTML> <%! private String getCookieValue(Cookie[] cookies, String name) { String value = null; if (cookies == null) return null; for (Cookie cookie : cookies) { if (cookie.getName().equals(name)) return cookie.getValue(); } return null; } %>

Page 27: 쿠키와 세션

27/50

쿠키 옵션 설정 – “ Domain” 옵션 (4)

앞의 두 JSP 페이지는 같은 도메인에 속하는 서로 다른 웹 서버에 설치해야 한다 .

[ 예제 4-7] 을 한 쪽 웹 서버에 StoreIDCookie.jsp 라는 이름으로 저장하고 , [ 예제 4-8]

을 다른 쪽 웹 서버에 ReadIDCookie.jsp 라는 이름으로 저장한 후 실행하면 다음과 같은

결과가 나온다 .

2. 쿠키 기술 (22)

① 첫 번째 웹 서버에 설치한 [ 예제 4-7] 의 URL 을 입력하세요 .

② 두 번째 웹 서버에 설치한 [ 예제 4-8] 의URL 을 입력하세요

[ 그림 4-15] 예제 4-7, 4-8 의 실행 결과

Page 28: 쿠키와 세션

28/50

세션 동작 방식 (1)

3. 세션 기술 (1)

Page 29: 쿠키와 세션

29/50

세션 동작 방식 (2)

3. 세션 기술 (2)

Page 30: 쿠키와 세션

30/50

세션 동작 방식 (3)

3. 세션 기술 (3)

Page 31: 쿠키와 세션

31/50

세션 동작 방식 (4)

3. 세션 기술 (4)

Page 32: 쿠키와 세션

32/50

세션 ID (1) 컨테이너는 클라이언트를 어떻게 식별하는가 ?

세션 ID(Session ID)• 클라이언트별로 유일한 세션 ID(Session ID) 를 부여하여 식별

• 클라이언트의 처음 요청이 들어오면 세션 ID 를 생성하여 응답 메시지로 전달

3. 세션 기술 (5)

Page 33: 쿠키와 세션

33/50

세션 ID (2) 세션 ID(Session ID)

• 클라이언트는 두번째 요청부터 세션 ID 를 요청 전송 시에 웹 서버에 보내고 , 웹 서버에서는 세션 ID 가 일치하는 세션을 찾아 요청과 연결한다 .

3. 세션 기술 (6)

Page 34: 쿠키와 세션

34/50

세션 ID (3) 세션 ID 공유 방법 – 쿠키 (JSESSIONID) 사용

3. 세션 기술 (7)

Page 35: 쿠키와 세션

35/50

세션 ID (4) 세션 ID 공유 방법 – 쿠키 (JSESSIONID) 사용

• 세션 기술에서는 웹 브라우저로 세션 ID 를 보낼 때 쿠키 형태로 만들어서 전송

• 쿠키 이름은 JSESSIONID

3. 세션 기술 (8)

[ 그림 4-23] 쿠키 형태로 전송되는 세션 아이디

Page 36: 쿠키와 세션

36/50

세션 ID (5) 세션 ID 공유 방법 – URL 재작성 방법

• 클라이언트가 쿠키를 지원하지 않을 경우

3. 세션 기술 (9)

Page 37: 쿠키와 세션

37/50

세션 객체 생성 (1)

서블릿 클래스에서 세션 객체를 접근하기 위해 Request 객체에 대해 getSession()

메서드를 호출

• getSession() 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의

객체를 반환

getSession() 메소드 동작에 유의

• 세션 객체 생성 및 세션 ID 쿠키와 관련된 모든 작업은 컨테이너가 수행

• 요청 메시지에 세션 ID 쿠키가 없으면 새로운 세션 객체를 생성하고 그 객체를 반환

새로운 세션 ID 를 생성하고 Response 에 세션 ID 쿠키까지 설정

• 요청 메시지에 세션 ID 쿠키가 있으면 세션 ID 와 일치하는 세션 객체가 검색하여 반환

만약 세션 ID 와 일치하는 세션 객체가 없는 경우 새롭게 세션 객체를 생성

3. 세션 기술 (10)

HttpSession session = request.getSession();세션 객체를 접근하는 메서드

Page 38: 쿠키와 세션

38/50

세션 객체 생성 (2)

새롭게 생성된 세션 객체의 식별

이미 생성되어 있는 세션에 대한 접근

3. 세션 기술 (11)

: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”);}

:

Page 39: 쿠키와 세션

39/50

세션 객체의 속성 설정 (1)

세션 객체에는 속성 (Attribute) 를 설정할 수 있다 .

• 세션 객체를 접근하는 웹 컴포넌트 사이에 데이터를 공유 가능

• getAttribute() 메서드를 이용하여 속성 조회

주의 : getAttribute() 메서드의 리턴 타입은 java.lang.Object 이므로 데이터 값을 본래의

타입으로 사용하려면 원하는 클래스로 캐스트 연산을 해야 한다 .

3. 세션 기술 (12)

session.setAttribute( “ID ”, “lee77 ”);

속성 이름 속성 값

String str = (String) session.getAttribute( “ID ”);

캐스트 연산자 속성 이름

Page 40: 쿠키와 세션

40/50

세션 객체의 속성 설정 (2)

세션 객체에서의 속성 제거

• removeAttribute() 메서드를 이용하여 속성 제거

3. 세션 기술 (13)

session.removeAttribute( “ID ”);

속성 이름

Page 41: 쿠키와 세션

41/50

세션 객체 제거 (1)

세션의 비활성화 세션 제거

3. 세션 기술 (14)

Page 42: 쿠키와 세션

42/50

세션 객체 제거 (2)

세션의 비활성화 세션 제거

3. 세션 기술 (15)

Page 43: 쿠키와 세션

43/50

세션 객체 제거 (3)

세션이 종료되는 세가지 경우

• 세션 타임 아웃 – 설정된 허용 비활성화 시간을 넘긴 경우

• 서블릿에 의한 종료 – 세션 객체에 대해 invalidate() 메소드 호출

• 웹 애플리케이션의 종료 – 문제 발생으로 다운되거나 언디플로이 (undeploy) 되는 경우

세션 타임아웃 설정 방법

3. 세션 기술 (16)

Page 44: 쿠키와 세션

44/50

세션 클래스 (HttpSession) - 주요 메소드

3. 세션 기술 (17)

Page 45: 쿠키와 세션

45/50

세션 기술 – 예제 (1)

3. 세션 기술 (18)

음식 이름을 입력하면동물 이름 입력 화면이 나타나고

동물 이름을 입력하면결과 화면이 나타납니다 .

[ 그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계

Page 46: 쿠키와 세션

46/50

세션 기술 – 예제 (2)

3. 세션 기술 (19)

http://localhost:8080/brain04/ptest/Food.html

http://localhost:8080/brain04/ptest/animal

http://localhost:8080/brain04/ptest/result

[ 그림 4-17] 의 첫 번째 화면의 URL

[ 그림 4-17] 의 두 번째 화면의 URL

[ 그림 4-17] 의 세 번째 화면의 URL

HTML 문서

서블릿 클래스

Page 47: 쿠키와 세션

47/50

세션 기술 – 예제 (3)

3. 세션 기술 (20)

[ 예제 4-9] 성격 테스트의 첫 번째 화면을 출력하는 HTML 문서

<HTML> <HEAD> <META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”> <TITLE> 성격 테스트 </TITLE> </HEAD> <BODY> <H3> 좋아하는 음식은 ?</H3> <FORM ACTION=animal> <INPUT TYPE=TEXTFIELD NAME=FOOD> <INPUT TYPE=SUBMIT VALUE= ‘ 확인 ’ > </FORM> </BODY> </HTML>

Page 48: 쿠키와 세션

48/50

세션 기술 – 예제 (4)

3. 세션 기술 (21)

[ 예제 4-10] 성격 테스트의 두 번째 화면을 출력하는 서블릿 클래스

import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class AnimalServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String food = request.getParameter( “FOOD ”); HttpSession session = request.getSession(); session.setAttribute( “FOOD ”, food); response.setContentType( “text/html;charset=euc-kr ”); PrintWriter out = response.getWriter(); out.println( “<HTML> ”); out.println( “<HEAD><TITLE> 성격 테스트 </TITLE></HEAD> ”); out.println( “<BODY> ”); out.println( “<H3> 좋아하는 동물은 ?</H3> ”); out.println( “<FORM ACTION=result> ”); out.println( “<INPUT TYPE=TEXTFIELD NAME=ANIMAL> ”); out.println( “<INPUT TYPE=SUBMIT VALUE= ’ 확인 ’ > ”); out.println( “</FORM> ”); out.println( “</BODY> ”); out.println( “</HTML> ”); } }

Page 49: 쿠키와 세션

49/50

세션 기술 – 예제 (5)

3. 세션 기술 (22)

[ 예제 4-11] 성격 테스트의 결과를 출력하는 서블릿 클래스

import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class ResultServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession session = request.getSession(); String food = (String) session.getAttribute( “FOOD ”); String animal = request.getParameter( “ANIMAL ”); session.invalidate(); response.setContentType( “text/html;charset=euc-kr ”); PrintWriter out = response.getWriter(); out.println( “<HEAD><TITLE> 성격 테스트 </TITLE></HEAD> ”); out.println( “<BODY> ”); out.println( “<H3> 성격 테스트 </H3> ”); out.printf( “ 당신은 %s 와 %s 를 좋아하는 성격입니다 . ”, food, animal); out.println( “</BODY> ”); out.println( “</HTML> ”); }}

Page 50: 쿠키와 세션

50/50

세션 기술 – 예제 (6)

3. 세션 기술 (22)

[ 그림 4-19] 예제 4-9 예제 4-10, 예제 4-11 의 실행 결과

Page 51: 쿠키와 세션

51/50

URL 재작성 메커니즘 (1)

쿠키를 사용할 수 없는 웹 환경에서는 URL 뒤에 세션 아이디를 붙여서 전송하는 방법을

사용하면 된다 .

본래의 URL 을 가지고 새로운 URL 을 만드는 방법이기 때문에 URL 재작성 (URL

rewriting) 메커니즘이라고 부른다 .

3. 세션 기술 (23)

[ 그림 4-24] URL 과 함께 전송되는 세션 아이디

http://localhost:8080/brain04/subscribe/Agreement.jsp; jsessionid=8088A1AAA61960F0B113E331A1460089

본래의 URL

URL 재작성으로 추가된 부분

Page 52: 쿠키와 세션

52/50

URL 재작성 메커니즘 (2)

URL 재작성을 하기 위해서는 URL 재작성 기능을 제공하는 response 객체의 en-

codeURL() 메서드를 사용하면 된다 .

encodeURL() 메서드에는 현재의 웹 컴포넌트를 기준으로 한 상대적인 URL 경로명을

파라미터로 넘겨 줄 수도 있다 .

이 메서드는 URL 경로명 뒤에 세미콜론 (;) 과 “ jessionid= 세션 _ 아이디”를 붙여서

반환

3. 세션 기술 (24)

String url = response.encodeURL(“http://localhost:8080/brain04/subscribe/Agreement.jsp ”);

본래의 URL

String url = response.encodeURL( “common/Greetings.jsp ”);

상대적인 URL 경로명

Page 53: 쿠키와 세션

53/50

URL 재작성 메커니즘 (3)

encodeURL() 메서드에는 슬래시 (/) 로 시작하는 URL 경로명을 넘겨줄 수도 있는데 ,

이런 값은 웹 서버 내에서의 URL 경로명을 해석된다 .

3. 세션 기술 (25)

String url = response.encodeURL( “/brain04/subscribe/Result.jsp ”);

웹 서버 내에서의 URL 경로명

[ 예제 4-16] 세션 데이터를 저장하는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><% session.setAttribute( “NAME ”, “김지영 ” ); session.setAttribute( “AGE ”, new Integer(21)); session.setAttribute( “GENDER ”, “ 여 ” ); %> <HTML> <HEAD><TITLE> 세션 데이터를 저장하는 JSP 페이지 </TITLE></HEAD> <BODY> 세션 데이터가 저장되었습니다 . <BR><BR> <A href=<%= response.encodeURL(“ReadSessionData.jsp ”) %>> 세션 데이터 읽기 </A> </BODY> </HTML>

Page 54: 쿠키와 세션

54/50

URL 재작성 메커니즘 (4)

이 두 예제를 brain04 웹 애플리케이션 디렉터리에 WriteSessionData.jsp 와 Read-

SessionData.jsp 이름으로 저장한다 .

3. 세션 기술 (26)

[ 예제 4-17] 세션 데이터를 읽는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%><HTML> <HEAD><TITLE> 세션 데이터를 읽는 JSP 페이지 </TITLE></HEAD> <BODY> 이름 : <%= session.getAttribute( “NAME ”) %> <BR> 나이 : <%= session.getAttribute( “AGE ”) %> <BR> 성별 : <%= session.getAttribute( “GENDER ”) %> </BODY> </HTML>

Page 55: 쿠키와 세션

55/50

URL 재작성 메커니즘 (5)

3. 세션 기술 (27)

[ 그림 4-25] 웹 브라우저의 쿠키 차단 방법

Page 56: 쿠키와 세션

56/50

URL 재작성 메커니즘 (6)

3. 세션 기술 (28)

[ 그림 4-26] 예제 4-16, 예제 4-17 의 실행 결과

①[ 예제 4-16] 의 URL 을 입력하세요 .

② 이 링크를 클릭하면 결과 화면이 나타납니다 .

Page 57: 쿠키와 세션

JSP & Servlet