6 쿠키와 세션.

Slides:



Advertisements
Similar presentations
12 장 자바 애플릿. 2 Applet 개요 Applet 프로그램 – 웹 페이지에 포함되어 구동 된다. 웹 브라우저나 애 플릿뷰어 (appletviewer) 에서 실행되는 프로그램 – 웹 브라우저 내에 Applet 을 해석하여 실행할 수 있 도록 Applet 구동용 인터프리터가.
Advertisements

제 07 장 쿠키와 세션 학기 인터넷비즈니스과 강 환수 교수.
Chapter 07 : 서블릿 고급2. chapter 07 : 서블릿 고급2 학습목표 세션 tracking hidden 태그 이용 encodeURL 메소드 사용법 URL 파라미터 이용 쿠키 이용 세션 이용 encodeURL 메소드 사용법.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
CHAP 22. 블루투스.
4 서블릿의 라이프 사이클.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
2 서블릿의 기초.
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
최윤정 Java 프로그래밍 클래스 상속 최윤정
㈜디아이씨 SSLVPN 협력사 접속방법 2017년 4월.
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Ch.07-5 xml-rpc 사용하기 김상엽.
2 서블릿의 기초.
Internet Computing KUT Youn-Hee Han
5 익셉션 처리.
11 필터와 래퍼.
PHP입문 Izayoi 김조흔.
웹 서버 동작 HTTP 클라이언트가 서버와 대화하는 방법과 데이터를 서버에서 클라이언트로 전송 하는 방법을 정의한 프로토콜
3 JSP의 기초.
4 쿠키와 세션.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
11장. 세션과 쿠키 제11장.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
KHS JDBC Programming 4 KHS
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
26강. 포워딩(Forwarding) RequestDispatcher 클래스 HttpServletResponse 클래스
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
Cookie 와 Session.
3강. JSP 맛보기 JSP 문서 작성 하기 JSP 아키텍처 Lecturer Kim Myoung-Ho Nickname 블스
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
인터넷응용프로그래밍 JavaScript(Intro).
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
8장 쿠키와 세션 한빛미디어(주).
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
08장 쿠키와 세션.
자바 5.0 프로그래밍.
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
웹(WWW).
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Web Storage 인공지능 연구실.
Introduction to JSP & Servlet
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
웹에서의 상태 - 변수 발표자 : 지왕태.
7 생성자 함수.
6 객체.
JAVA 프로그래밍 16장 JNLP.
Ⅰ. Response 개체 그렇다면 프로그래밍 언어를 수행하는 컴퓨터의 개념적인 구조를 살펴 본다면, 프로그래밍 언어가 무엇인지 이해하는데 도움이 될 것입니다. 현재 컴퓨터 구조의 모태가 되고 있는 폰 노이만 구조는 그림에서 보는 것과 같이, 명령어와 데이터를 저장하는.
디지털광고 구동 원리 전중달 CTO.
20 XMLHttpRequest.
Presentation transcript:

6 쿠키와 세션

학습목표 셋 이상의 화면으로 구성된 웹 애플리케이션을 작성 할 때에는 JSP 페이 지나 서블릿 클래스들이 서로 데이터를 주고 받도록 만들어야 할 필요가 있다. 이 장에서는 이럴 때 필요한 쿠키와 세션 기술에 대해 알아보자. 내 용 쿠키와 세션 쿠키 기술 세션 기술 / HttpSession

1. 쿠키와 세션 (1) 세션(Session) - 정의 클라이언트의 연속적인 요청 또는 그 요청에 대한 서비스 기간 예: 홈쇼핑 사이트에서의 로그인과 로그아웃 일련의 웹 컴포넌트들이 클라이언트의 연속적인 요청에 의해 실행하면서 클라이언트와 의 연결 상태를 유지시키는 개념 HTTP 프로토콜은 비연결지향(Connection-less) 프로토콜 웹 서버는 한 클라이언트의 세션 상태를 유지하기 위한 메커니즘이 요구됨 쿠키(cookie) 기술 – 세션 관련 정보를 클라이언트에 저장 세션(Session) 기술 – 세션 관련 정보를 웹 서버에 저장

[그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달 1. 쿠키와 세션 (2) 쿠키(Cookie) 기술 쿠키 (Cookie) – 웹 서버와 클라이언트가 주고받는 작은 데이터 조각 웹 서버가 웹 브라우저로 쿠키(데이터)를 보냈다가 웹 서버 쪽으로 다시 되돌려 받는 방 법을 통해 세션 상태를 유지 첫 번째 웹 컴포넌트는 웹 브라우저로 HTML 문서를 보낼 때 전달한 데이터를 함께 보 내며, 웹 브라우저는 그 데이터를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 URL과 함께 웹 서버로 보낸다. [그림 4-3] 쿠키 기술을 이용한 웹 컴포넌트 간의 데이터 전달

[그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달 1. 쿠키와 세션 (3) 세션(Session) 기술 웹 서버에서 별도의 세션 객체에 세션 상태 정보를 저장 및 관리 동일한 세션에서 실행되는 웹 컴포넌트 간에 세션 객체를 공유하여 데이터 전달 첫 번째 웹 컴포넌트는 웹 서버 쪽에 데이터를 저장해 놓고, 그 데이터를 읽기 위해 필요 한 세션 아이디만 웹 브라우저로 보낸다. 웹 브라우저는 아이디를 저장해 두었다가 두 번째 웹 컴포넌트를 호출할 때 웹 서버로 보내며, 그 아이디를 이용하면 저장된 데이터를 찾을 수 있다 [그림 4-4] 세션 기술을 이용한 웹 컴포넌트 간의 데이터 전달

Cookie cookie = new Cookie( “AGE ”, “26 ”); 2. 쿠키 기술 (1) 쿠키 생성 및 저장 (1) 쿠키 데이터를 웹 브라우저 쪽에 저장하기 위해 해야 하는 두 가지 일 첫째 : Cookie 클래스의 객체를 생성한다. 둘째 : response 클래스의 addCookie() 메서드를 호출하여 응답 메시지에 쿠키를 추가한다. 쿠키 객체 생성 Cookie 클래스는 javax.servlet.http 패키지에 속하며, 이 클래스의 객체를 만들 때는 쿠키의 이름 과 값을 파라미터로 넘겨줘야 한다. 파라미터는 모두 String 타입이므로, 쿠키의 값이 수치일 경우는 문자 데이터로 만들어서 넘겨줘 야 한다. Cookie cookie = new Cookie( “AGE ”, “26 ”); 쿠키 이름 쿠키 값

response.addCookie(cookie); 2. 쿠키 기술 (2) 쿠키 생성 및 저장 (2) 쿠키 추가 Response 클래스의 addCookie() 메서드는 웹 브라우저로 쿠키를 보내는 기능을 한다. 응답 메시지에 쿠키를 저장하기 위해 response 객체에 대해 addCookie() 메소드를 호출, Cookie 객체를 파라미터로 넘겨줘야 한다. addCookie() 메서드를 통해 웹 브라우저로 전송된 쿠키를 실제로 저장하는 일은 웹 브라우저가 하도록 되어 있다. 웹 브라우저는 쿠키를 저장할 때 쿠키를 보낸 웹 서버의 주소도 함께 저장해 놓는다. response.addCookie(cookie); Cookie 객체

2. 쿠키 기술 (3) 쿠키 생성 및 저장 (3) 웹 브라우저 쪽에 쿠키 데이터를 저장하는 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의 실행 결과

2. 쿠키 기술 (4) 쿠키 생성 및 저장 (4) 쿠키 데이터를 저장된 응답 메시지 교제 pp.202 HTTP 응답 메시지 참조

Cookie cookies[] = request.getCookies(); 2. 쿠키 기술 (5) 쿠키 조회 (1) 웹 브라우저는 웹 서버로 요청을 보낼 때 마다 URL에 포함된 웹 서버의 주소에 해당하 는 모든 쿠키를 찾아서 웹 서버로 함께 보낸다. 서블릿(또는 JSP)는 웹 브라우저가 보내온 요청 메시지로 부터 쿠키 데이터를 읽어와 세 션 상태 정보를 인식하고 처리하도록 한다. Request 객체에 대해 getCookies() 메서드를 이용하여 쿠키 데이터를 조회할 수 있다. getCookies() 메서드는 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 반환 하기 때문에 다음과 같은 Cookie 배열 변수에 반환값을 받아야 한다. Cookie cookies[] = request.getCookies(); 웹 브라우저가 보낸 모든 쿠키를 Cookie 배열로 만들어서 리턴하는 메서드

2. 쿠키 기술 (6) 쿠키 조회 (2) String name = cookies[i].getName(); 쿠키 이름 조회 - Cookie 객체에 대해 getName()메서드를 호출하여 조회 쿠키 값 조회 - 원하는 이름의 Cookie 객체를 찾은 다음에는 그 객체에 대해 getValue() 메서드를 호출해서 쿠키 값을 조회 String name = cookies[i].getName(); 쿠키 이름을 가져오는 메서드 String value = cookie[i].getValue(); 쿠키 값을 가져오는 메서드

2. 쿠키 기술 (7) 쿠키 조회 (3) - 예제 [예제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(); } %>>

2. 쿠키 기술 (8) 쿠키 조회 (4) - 예제 웹 브라우저를 종료한 후에 서블릿을 요청한 경우 앞의 예제와 연속하여 실행하는 경우 [그림 4-6] 예제 4-2의 실행 결과(1) [그림 4-7] 예제 4-2의 실행 결과(2)

2. 쿠키 기술 (9) 쿠키 수정 (1) 웹 브라우저에 저장되어 있는 쿠키의 값을 수정 하기 위해서는 새로운 쿠키를 저장할 때와 마찬가지로 수정된 값을 가진 Cookie 객체를 생성하여 addCookie() 메서드로 넘겨 주면 된다. [예제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

[그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법 2. 쿠키 기술 (10) 쿠키 수정 (2) [그림 4-9] 예제 4-3의 실행 결과를 확인하는 방법

2. 쿠키 기술 (11) 쿠키 삭제 (1) 쿠키 기술에서 데이터를 삭제하기 위해서는 쿠키의 남은 수명을 0으로 설정하는 방법을 사용해야 한다. 쿠키의 수명을 설정하기 위해서는 addCookie() 메서드를 호출하기 전에 Cookie 객체에 대해 setMaxAge() 메서드를 호출하면 된다. 초단위의 값을 넘겨줘야 하므로, 1시간 후에 쿠키가 지워지도록 만들려면 다음과 같은 값을 넘겨 줘야 한다. setMaxAge() 메서드에 0이나 마이너스 값을 넘겨줄 수도 있다. cookie.setMaxAge(3600); 쿠키의 최대 수명(초 단위) cookie.setMaxAge(0); cookie.setMaxAge(-1); 쿠키를 바로 삭제하도록 만드는 값 웹 브라우저가 끝날 때 쿠키가 삭제되도록 만드는 값

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라는 이름으로 저장한다. [예제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>

[그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법 2. 쿠키 기술 (14) 쿠키 삭제 (3) - 예제 [그림 4-10] 예제 4-4의 실행 결과를 확인하는 방법

cookie.setPath( “/brain04/sub1/ ”); 2. 쿠키 기술 (15) 쿠키 옵션 설정 – “Path” 옵션 (1) Path 옵션은 쿠키가 특정 경로명을 갖는 URL에 대한 요청에만 전송하도록 설정 웹 브라우저는 웹 서버로 URL을 보낼 때 웹 서버에 속하는 모든 쿠키를 함께 보내는 것이 기본적 인 동작이지만, addCookie() 메서드를 호출하기 전에 Cookie 객체에 대해 setPath() 메서드를 통 해 path 옵션을 설정하여 쿠키의 전송 범위를 한정시킬 수 있다. setPath() 메서드에는 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명을 파라미터 로 넘겨줘야 한다. setPath() 메서드에 넘겨주는 URL 경로명은 반드시 ‘/’로 시작해야 하고 마지막도 ‘/’로 끝내는 것이 좋다. cookie.setPath( “/brain04/sub1/ ”); 쿠키를 전송할 URL 경로명

2. 쿠키 기술 (16) 쿠키 옵션 설정 – “Path” 옵션 (2) [예제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>

2. 쿠키 기술 (17) 쿠키 옵션 설정 – “Path” 옵션 (3) [예제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(); } %>

2. 쿠키 기술 (18) 쿠키 옵션 설정 – “Path” 옵션 (4) sub1 디렉터리에 있는 JSP 페이지는 [예제 4-5]가 저장한 JOB 쿠키를 받을 수 있지만, sub2 디렉터리에 있는 JSP 페이지는 받을 수 없다. [그림 4-12] 예제 4-5의 실행 결과

cookie.setDomain( “.hanb.co.kr ”); 2. 쿠키 기술 (19) 쿠키 옵션 설정 – “Domain” 옵션 (1) 쿠기의 ‘Domain’ 옵션은 쿠키가 같은 도메인의 여러 웹 서버로 전송이 가능하도록 함 웹 서버가 보낸 쿠키를 다른 웹 서버가 받도록 하기 위해서는 addCookie() 메서드를 호 출하기 전에 Cookie 객체에 대해 setDomain() 메서드를 호출하여 도메인 옵션을 설정하 도록 한다. cookie.setDomain( “.hanb.co.kr ”); 쿠키를 받을 도메인 [그림 4-13] 도메인이 지정된 쿠키가 전송되는 범위

2. 쿠키 기술 (20) 쿠키 옵션 설정 – “Domain” 옵션 (2) 다음 두 예제는 setDomain() 메서드의 사용 예 [예제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>

2. 쿠키 기술 (21) 쿠키 옵션 설정 – “Domain” 옵션 (3) [예제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(); } %>

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)

3. 세션 기술 (6) 세션 ID (2) 세션 ID(Session ID)

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

3. 세션 기술 (8) 세션 ID (4) 세션 ID 공유 방법 – 쿠키(JSESSIONID) 사용 [그림 4-23] 쿠키 형태로 전송되는 세션 아이디

3. 세션 기술 (9) 세션 ID (5) 세션 ID 공유 방법 – URL 재작성 방법 클라이언트가 쿠키를 지원하지 않을 경우

HttpSession session = request.getSession(); 3. 세션 기술 (10) 세션 객체 생성 (1) 서블릿 클래스에서 세션 객체를 접근하기 위해 Request 객체에 대해 getSession() 메서 드를 호출 getSession() 메서드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의 객체를 반환 getSession() 메소드 동작에 유의 세션 객체 생성 및 세션 ID 쿠키와 관련된 모든 작업은 컨테이너가 수행 요청 메시지에 세션 ID 쿠키가 없으면 새로운 세션 객체를 생성하고 그 객체를 반환 새로운 세션 ID를 생성하고 Response에 세션 ID 쿠키까지 설정 요청 메시지에 세션 ID 쿠키가 있으면 세션 ID와 일치하는 세션 객체가 검색하여 반환 만약 세션 ID와 일치하는 세션 객체가 없는 경우 새롭게 세션 객체를 생성 HttpSession session = request.getSession(); 세션 객체를 접근하는 메서드

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 이므로 데이터 값을 본래의 타입 으로 사용하려면 원하는 클래스로 캐스트 연산을 해야 한다. session.setAttribute( “ID ”, “lee77 ”); 속성 이름 속성 값 String str = (String) session.getAttribute( “ID ”); 캐스트 연산자 속성 이름

session.removeAttribute( “ID ”); 3. 세션 기술 (13) 세션 객체의 속성 설정 (2) 세션 객체에서의 속성 제거 removeAttribute() 메서드를 이용하여 속성 제거 session.removeAttribute( “ID ”); 속성 이름

3. 세션 기술 (14) 세션 객체 제거 (1) 세션의 비활성화  세션 제거

3. 세션 기술 (15) 세션 객체 제거 (2) 세션의 비활성화  세션 제거

3. 세션 기술 (16) 세션 객체 제거 (3) 세션이 종료되는 세가지 경우 세션 타임아웃 설정 방법 세션 타임 아웃 – 설정된 허용 비활성화 시간을 넘긴 경우 서블릿에 의한 종료 – 세션 객체에 대해 invalidate() 메소드 호출 웹 애플리케이션의 종료 – 문제 발생으로 다운되거나 언디플로이(undeploy) 되는 경우 세션 타임아웃 설정 방법

3. 세션 기술 (17) 세션 클래스(HttpSession) - 주요 메소드

[그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계 3. 세션 기술 (18) 세션 기술 – 예제 (1) 음식 이름을 입력하면 동물 이름 입력 화면이 나타나고 동물 이름을 입력하면 결과 화면이 나타납니다. [그림 4-17] 성격 테스트 웹 애플리케이션의 화면 설계

3. 세션 기술 (19) 세션 기술 – 예제 (2) http://localhost:8080/brain04/ptest/Food.html HTML 문서 [그림 4-17]의 첫 번째 화면의 URL http://localhost:8080/brain04/ptest/animal 서블릿 클래스 [그림 4-17]의 두 번째 화면의 URL http://localhost:8080/brain04/ptest/result [그림 4-17]의 세 번째 화면의 URL

3. 세션 기술 (20) 세션 기술 – 예제 (3) [예제4-9] 성격 테스트의 첫 번째 화면을 출력하는 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>

3. 세션 기술 (21) 세션 기술 – 예제 (4) [예제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> ”); }

3. 세션 기술 (22) 세션 기술 – 예제 (5) [예제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> ”); }

3. 세션 기술 (22) 세션 기술 – 예제 (6) [그림 4-19] 예제 4-9 예제 4-10, 예제 4-11의 실행 결과

[그림 4-24] URL과 함께 전송되는 세션 아이디 3. 세션 기술 (23) URL 재작성 메커니즘 (1) 쿠키를 사용할 수 없는 웹 환경에서는 URL 뒤에 세션 아이디를 붙여서 전송하는 방법을 사용하면 된다. 본래의 URL을 가지고 새로운 URL을 만드는 방법이기 때문에 URL 재작성(URL rewriting) 메커니즘이라고 부른다. [그림 4-24] URL과 함께 전송되는 세션 아이디 본래의 URL http://localhost:8080/brain04/subscribe/Agreement.jsp; jsessionid=8088A1AAA61960F0B113E331A1460089 URL 재작성으로 추가된 부분

3. 세션 기술 (24) URL 재작성 메커니즘 (2) URL 재작성을 하기 위해서는 URL 재작성 기능을 제공하는response 객체의 encodeURL() 메서드를 사용하면 된다. encodeURL() 메서드에는 현재의 웹 컴포넌트를 기준으로 한 상대적인 URL 경로명을 파 라미터로 넘겨 줄 수도 있다. 이 메서드는 URL 경로명 뒤에 세미콜론(;)과 “jessionid=세션_아이디”를 붙여서 반환 String url = response.encodeURL(“http://localhost:8080/brain04/subscribe/Agreement.jsp ”); 본래의 URL String url = response.encodeURL( “common/Greetings.jsp ”); 상대적인 URL 경로명

3. 세션 기술 (25) URL 재작성 메커니즘 (3) encodeURL() 메서드에는 슬래시(/)로 시작하는 URL 경로명을 넘겨줄 수도 있는데, 이런 값은 웹 서버 내에서의 URL 경로명을 해석된다. 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>

3. 세션 기술 (26) URL 재작성 메커니즘 (4) 이 두 예제를 brain04 웹 애플리케이션 디렉터리에 WriteSessionData.jsp와 ReadSessionData.jsp이름으로 저장한다. [예제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>

3. 세션 기술 (27) URL 재작성 메커니즘 (5) [그림 4-25] 웹 브라우저의 쿠키 차단 방법

3. 세션 기술 (28) URL 재작성 메커니즘 (6) ①[예제 4-16]의 URL을 입력하세요. ②이 링크를 클릭하면 결과 화면이 나타납니다. [그림 4-26] 예제 4-16, 예제 4-17의 실행 결과