11장. 세션과 쿠키 제11장.

Slides:



Advertisements
Similar presentations
2008 년 11 월 20 일 실습.  실험제목 ◦ 데이터베이스 커넥션 풀  목표 ◦ 데이터베이스 커넥션 풀의 사용.
Advertisements

제 07 장 쿠키와 세션 학기 인터넷비즈니스과 강 환수 교수.
Chapter 07 : 서블릿 고급2. chapter 07 : 서블릿 고급2 학습목표 세션 tracking hidden 태그 이용 encodeURL 메소드 사용법 URL 파라미터 이용 쿠키 이용 세션 이용 encodeURL 메소드 사용법.
CHAP 22. 블루투스.
CHAPTER 15. JSP.
1. 신뢰할 수 있는 싸이트 등록 인터넷 익스플로러 실행 후 실행
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
㈜디아이씨 SSLVPN 협력사 접속방법 2017년 4월.
12장. JSP에서 자바빈 활용 제12장.
Ch.07-5 xml-rpc 사용하기 김상엽.
SSL - VPN 사용자 가이드 - IT 지원실 네트워크 운영팀 -.
2 서블릿의 기초.
10장. 에러 처리 제10장.
Internet Computing KUT Youn-Hee Han
PHP입문 Izayoi 김조흔.
4 쿠키와 세션.
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
Chapter05 오디오와 비디오 HTML5 Programming.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
KHS JDBC Programming 4 KHS
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
10장. 예외처리.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
Cookie 와 Session.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
CHAP 13. 방명록 만들기 실습.
2장. JSP 프로그래밍을 위한 환경구성 제2장.
홀인원2.0 설치 메뉴얼.
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Nessus 4 설치 정보보호응용 조용준.
Ⅰ. ASP개체 모델 Ⅱ. Request 개체 그렇다면 프로그래밍 언어를 수행하는 컴퓨터의 개념적인 구조를 살펴 본다면, 프로그래밍 언어가 무엇인지 이해하는데 도움이 될 것입니다. 현재 컴퓨터 구조의 모태가 되고 있는 폰 노이만 구조는 그림에서 보는 것과 같이, 명령어와.
8장 쿠키와 세션 한빛미디어(주).
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
08장 쿠키와 세션.
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
STS 에서 웹 서버 설치 방법.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Web Storage 인공지능 연구실.
Introduction to JSP & Servlet
객체 및 객체 모델 데이터 전송 방식 Request 객체 Response 객체
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
MIDP 네트워크 프로그래밍 ps lab 김윤경.
9 브라우저 객체 모델.
6 쿠키와 세션.
Homework #3 - 페이지 모듈화 및 로그인처리 -
CCIT 네트워크 발표 정보보호학과 평문 사이트와 SSL 사이트, SSL strip과 데이터 변조를 이용한 로그인 취약점
7 생성자 함수.
6 객체.
AJAX? Cho Hyun Min.
Ⅰ. Response 개체 그렇다면 프로그래밍 언어를 수행하는 컴퓨터의 개념적인 구조를 살펴 본다면, 프로그래밍 언어가 무엇인지 이해하는데 도움이 될 것입니다. 현재 컴퓨터 구조의 모태가 되고 있는 폰 노이만 구조는 그림에서 보는 것과 같이, 명령어와 데이터를 저장하는.
디지털광고 구동 원리 전중달 CTO.
Presentation transcript:

11장. 세션과 쿠키 제11장

1. 세션의 활용 세션의 원리 세션(session)의 기본 개념 Tomcat 내부에서 사용자의 request 정보를 보관할 때 사용되는 기본 객체 같은 웹 사이트에 접속 중인 웹 브라우저(사용자) 마다 각각에 대응하여 하나씩의 세션 객체가 생성되고 활용 (8.5절 참조) 제11장

임의의 웹 브라우저부터의 첫 번째 요청을 처리할 때 session이 생성되고 관련 타이머가 동작한다. 1. 세션의 활용 세션의 원리 세션 객체의 생성 시점과 종료 시점 한 명의 브라우저 사용자에 대해 다른 웹 페이지로 넘어가도 지속적으로 공유해야 하는 데이터 저장 장소로서 세션을 활용 e.g., 로그인한 회원정보, 쇼핑카트 정보 사용자 데이터 보관 장소 Session: 사용자의 request 정보를 서버측의 session 객체에 보관 Cookie: response하여 사용자의 file에 보관 session 생성시기 session 소멸시기 임의의 웹 브라우저부터의 첫 번째 요청을 처리할 때 session이 생성되고 관련 타이머가 동작한다. 1) 세션 타이머가 만료 2) 코드상에서 명시적으로 세션 소멸 (invalidate() 메소드) 제11장

1. 세션의 활용 세션 객체의 속성 사용 [예제 11.1-1] jspbook\ch11\sessionAttr.jsp 제11장 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>세션 속성 사용하기</title></head> <% session.setAttribute("BookName", "jspbook"); session.setAttribute("Chapter", "11장"); %> <body> 세션에 저장된 속성 정보 <hr/> <table border="1"> <tr> <th>BookName</th><td><%= session.getAttribute("BookName") %></td>// BookName 속성 가져오기 </tr> <th>Chapter</th><td><%= session.getAttribute("Chapter") %></td> // Chapter 속성 가져오기 </table> </body> </html> // 세션에 두개의 속성 설정 및 값 저장 제11장

1. 세션의 활용 세션의 타임아웃 ‘가장 최근에 session 객체에 접근한 시각’ 및 session이 생성된 시간을 돌려주는 메소드: 브라우저가 JSP/Servlet을 실행할 때마다 갱신됨 세션 만료와 재생성: 처음 생성 시간 이후 30분 동안 재실행 없는 경우 session.getLastAccessedTime() session.getCreationTime() 제11장

1. 세션의 활용 세션의 타임아웃 세션의 유효시간 설정 방법 1 – jspbook\WEB-INF\web.xml 활용 세션의 유효시간 설정 방법 2 – session 객체의 메소드 활용 <?xml version="1.0" encoding="utf-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" ... version="2.5"> ... <session-config> <session-timeout>100</session-timeout> <!– 분 단위 --> </session-config></web-app> <% session.setMaxInactiveInterval(100 * 60); // 초 단위 %> 제11장

1. 세션의 활용 Session의 유효 시간이 왜 필요한가? A 사용자가 은행 사이트에 로그인을 한다음 웹 브라우저를 종료하지 않은 채로 자리를 비웠다. 10분쯤 후에 사용자 B가 그 PC에 앉게 되면 로그인한 상태그대로 은행 계좌에 접근할 수 있다. 로그인 유지 기능이 필요하여 session 객체가 필요하지만 유효시간을 설정함으로써 이러한 문제를 방지할 수 있다. 요즈음의 은행 사이트들은 30초 – 1분 동안 웹 접근이 없다면 세션을 종료(logout) 하려고 시도한다. 제1장

2. 세션을 활용한 로그인 처리 구현 구글의 로그인 정보 입력 화면 사용자가 명시적으로 로그아웃을 하기 전까지 웹 사용자 정보를 계속적으로 유지하면서 그 사용자와 연관된 정보를 계속적으로 관리한다. 제11장

2. 세션을 활용한 로그인 처리 구현 session을 사용한 일반적인 로그인 기법 처리과정 ➀ HTML 폼으로부터 로그인 정보를 입력받는다. ➁ 로그인에 성공하면 (즉, 데이터베이스에 이미 저장되어 있는 로그인 정보와 HTML 폼으로부터 입력받은 정보가 일치하면) session 기본 객체의 특정 속성에 데이터를 기록한다. ➂ 이후 각 JSP 및 Servlet에서는 선행 작업으로서 session 기본 객체에 접근하여 지정한 특정 속성이 존재하는지 검사한다. 그 속성이 존재한다면 로그인이 되어 있는 것으로 간주한다. ④ 사용자가 로그아웃을 할 경우 세션에 저장된 특정 속성을 지우거나 session.invalidate() 메소드를 호출하여 세션을 종료한다. 세션이 종료되면 자연스럽게 저장된 속성도 모두 지워진다. 제11장

2. 세션을 활용한 로그인 처리 구현 웹 어플리케이션의 관리자 정보 저장하기 (DB를 대신하여 저장) [예제 11.2] jspbook\WEB-INF\web.xml <?xml version="1.0" encoding="utf-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <context-param> <param-name>MasterID</param-name> <param-value>jspbook</param-value> </context-param> <param-name>MasterPassword</param-name> <param-value>112233</param-value> </web-app> 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 처리 예제 [예제 11.3-1] jspbook\ch11\login.html 01 02 03 04 05 06 07 08 09 10 11 12 13 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>로그인</title></head> </head> <body> 관리자 (Master)로 로그인하세요.<br/> <form action="loginProcess.jsp" method="post"> ID : <input type="text" name="id"><br/> Password : <input type="password" name="pw"><br/> <input type="submit" value="전송"> </body> </html> 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 처리 예제 [예제 11.3-2] jspbook\ch11\loginProcess.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <%@ page contentType="text/html;charset=utf-8" %> <% String storedID = application.getInitParameter("MasterID"); String storedPW = application.getInitParameter("MasterPassword"); String id = request.getParameter("id"); String pw = request.getParameter("pw"); // web.xml의 ID/Password와 form으로 입력받은 값을 각각 비교 if (id.equals(storedID) && pw.equals(storedPW)) { // 아이디와 패스워드 모두 일치 session.setAttribute("MasterLoginID", id); // 로그인 성공을 나타내는 특정속성 설정 %> <html> <head><title>로그인 처리</title></head> <body> 로그인에 성공했습니다. <br/><br/> <a href="loginCheck.jsp">로그인 체크</a> </body> </html> 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 처리 예제 [예제 11.3-2] jspbook\ch11\loginProcess.jsp 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <% } else if (id.equals(storedID)) { // 아이디 일치 & 패스워드 불일치 %> <script> alert("패스워드가 다릅니다."); history.go(-1); // 바로 직전 page인 login.html을 수행 </script> } else { // 아이디 불일치 alert("로그인 ID가 다릅니다."); history.go(-1); } 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 지속 여부 판단 [예제 11.3-3] jspbook\ch11\loginCheck.jsp 01 02 03 04 05 06 07 08 09 10 <%@ page contentType="text/html;charset=utf-8" %> <% // 세션의 MasterLoginID 속성 읽어옴 boolean isLogin = false; String masterID = (String)session.getAttribute("MasterLoginID"); if (masterID != null) { isLogin = true; } %> <html> <head><title>로그인여부 검사</title></head> // MasterLoginID에 값이 저장되어 있으면 로그인되어진 상태 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 지속 여부 판단 [예제 11.3-3] jspbook\ch11\loginCheck.jsp 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <body> <% if (isLogin) { %> 아이디 "<%= masterID %>"로 로그인 한 상태 <br/><br/> <a href="logout.jsp">로그아웃</a> } else { 로그인하지 않은 상태 } </body> </html> 제11장

2. 세션을 활용한 로그인 처리 구현 로그아웃 처리 세션 객체를 무효화하지 않고 다음과 같이 속성만 제거해도 된다. 가급적이면 invalidate()를 사용하는 것이 좋다. [예제 11.3-4] jspbook\ch11\logout.jsp 01 02 03 04 05 06 07 08 09 10 11 <%@ page contentType="text/html;charset=utf-8" %> <% session.invalidate(); // 세션의 무효화 %> <html> <head><title>로그아웃</title></head> <body> 로그아웃하였습니다. <br/><br/> <a href="login.html">처음부터</a> </body> </html> session.removeAttribute("MasterLoginID"); 제11장

2. 세션을 활용한 로그인 처리 구현 Servlet에서 세션의 활용 Servlet에서는 다음과 같이 명시적으로 개발자가 session 객체를 얻어 와서 활용 import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... HttpSession session = request.getSession(); } 제11장

2. 세션을 활용한 로그인 처리 구현 Servlet에서 세션의 활용 session 기본 객체를 얻어오는 3가지 메소드 메소드 호출 방법 설명 request.getSession(true) 현재 session 객체가 존재한다면 삭제하고 항상 session 객체를 새롭게 생성하여 리턴한다. request.getSession(false) 현재 session 객체가 존재한다면 그 session 객체를 그대로 리턴해준다. 만약 session 객체가 존재하지 않는다면 생성하지 않고 null을 리턴 한다. request.getSession() 우선 session 객체의 존재여부를 확인하여 기존에 session이 없다면 새롭게 session 객체를 생성하여 리턴해주고, 기존에 존재하는 session객체가 있다면 그대로 그것을 리턴해준다. 제11장

2. 세션을 활용한 로그인 처리 구현 로그인 처리를 위하여 쿠키 대신 세션을 사용하는 이유는? 서버로부터 클라이언트의 쿠키에 저장된 데이터는 정보의 유출 가능성이 크다 세션 데이터는 서버에 저장되기 때문에 보안측면에서 더 유리하다. 쿠키에 저장된 정보들은 사용자가 같은 웹 사이트를 방문할 때마다 읽혀서 서버로 전송된다. 사용자가 웹 브라우저에서 쿠키를 지원하지 않도록 설정할 경우 쿠키 자체를 사용할 수 없게 된다. 세션은 사용자가 설정할 권한이 없으며 Tomcat이 항상 지원하는 기능이다. 즉, 로그인 기능을 쿠키로 작성한 상태에서 브라우저에서 쿠키 지원을 하지 않으면 해당 웹 사이트는 로그인 기능 자체를 수행할 수 없다. 제1장

3. 쿠키의 활용 쿠키의 원리 쿠키 (Cookie) 쿠키의 활용 방식 응답전송 (response) 요청전송 (request) 어떤 웹 서버에서 인터넷 사용자의 컴퓨터에 설치하는 작은 기록 정보 파일 쿠키의 활용 방식 쿠키가 웹 브라우저 측에 저장이 되면 웹 브라우저는 해당 서버로 웹 페이지를 요청할 때 이 쿠키를 함께 전송한다. 서버는 전송받은 쿠키를 사용하여 필요한 데이터를 읽어 올 수 있다. 응답전송 (response) 서버에서 브라우저로 쿠키 전송 한번만 일어난다. 요청전송 (request) 일단 웹 브라우저에 쿠키가 저장되면 쿠키가 삭제되기 전까지 매번 웹 서버에 전송된다. 제11장 쿠키의 3단계 동작 방식

3. 쿠키의 활용 쿠키의 생성 및 활용 제한요소 쿠키의 구성 요소 이름 - 각각의 쿠키를 구별하기 위하여 사용되는 식별자 (하나의 웹 사이트가 여러 개의 쿠키를 저장할 수 있기 때문에 쿠키를 구별함) 값 – 쿠키와 연관된 내용(값) 유효시간 - 쿠키의 유지 시간 도메인 – 클라이언트가 쿠키를 전송할 서버의 도메인 경로 – 클라이언트가 쿠키를 전송할 경로 제한요소 쿠키는 하나의 웹 사이트당 20개의 쿠키가 저장될 수 있다. 한 쿠키당 데이터 값으로 4096 바이트를 넘을 수 없다. 디스크에 저장된 쿠키는 영원히 저장되지 않으며 지속 시간을 설정 e.g., 1시간 지속, 혹은 웹 브라우저를 닫으면 삭제 또한 지정한 도메인이나 경로로만 쿠키를 전송하도록 설정할 수 있다. <% Cookie cookie = new Cookie("cookieName", "cookieValue"); response.addCookie(cookie); // 클라이언트에 저장 %> 제11장

3. 쿠키의 활용 쿠키의 생성 및 활용 쿠키 객체에 호출할 수 있는 메소드 메소드 리턴 타입 설 명 getName() String 쿠키의 이름을 돌려준다. getValue() 쿠키의 값을 돌려준다. setValue(String value) void 쿠키의 값을 지정한다. setDomain(String domain) 쿠키가 전송될 서버의 도메인을 지정한다. 브라우저에서 서버쪽으로 쿠키에 대한 요청전송을 할 때에는 그 쿠키를 응답전송한 서버에게만 보낸다. 하지만 setDomain() 메소드를 사용해서 도메인 정보를 적절하게 설정하면 그 도메인에 속해있는 다른 서버에게도 요청전송을 하게 된다. 그러므로 같은 도메인 내의 두 서버에서 쿠키를 공유할 수 있다. 주의할 점은 파라미터 값으로 특정 도메인 이름을 설정할 때에는 .google.com 과 같이 맨 앞에 점(.)을 넣어야 한다. getDomain() 쿠키가 적용되는 도메인을 돌려준다. 제11장

3. 쿠키의 활용 쿠키의 생성 및 활용 쿠키 객체에 호출할 수 있는 메소드 메소드 리턴 타입 설 명 setPath(String uri) void 쿠키를 전송할 경로를 지정한다. 만약 이 설정을 하지 않으면 쿠키의 응답전송시에 활용했던 경로 및 그 하위 경로에 대해서만 요청전송이 된다. 해당 웹 어플리케이션의 모든 경로에 대해 요청전송이 되게끔 하려면 setPath("/") 와 같이 설정해 주면 된다. getPath() String 쿠키가 적용되는 전송 경로를 돌려준다. setMaxAge(int time) 쿠키의 유효 시간을 초 단위로 지정한다. -1을 입력할 경우 웹 브라우저를 닫을 때 쿠키가 함께 삭제된다. 디폴트 값은 -1 이다. getMaxAge() int 쿠키의 유효 시간을 돌려준다. 쿠키가 삭제되기 전까지의 시간을 초 단위로 얻어올 수 있다. 제11장

3. 쿠키의 활용 쿠키의 생성 예제 [예제 11.4-1] jspbook\ch11\createCookies.jsp 01 02 03 04 05 06 07 08 09 10 11 12 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.net.URLEncoder" %> <%@ page import="java.util.Date" %> <% // name 및 date 쿠키 생성 // 한글을 URL 인코딩된 값으로 처리 Cookie cookie = new Cookie("name", URLEncoder.encode("jspbook 쿠키 테스트")); Cookie cookie2 = new Cookie("date", new Date().toString()); // date 쿠키 생성 response.addCookie(cookie); response.addCookie(cookie2); %> <html> <head><title>쿠키생성</title></head> <body> // reponse 객체에 두 쿠키 추가 제11장

3. 쿠키의 활용 쿠키의 생성 예제 [예제 11.4-1] jspbook\ch11\createCookies.jsp 13 14 15 16 17 18 19 20 21 22 23 쿠키 이름: <%= cookie.getName() %><br/> 쿠키 값: <%= cookie.getValue() %><br/> <br/> 쿠키 이름: <%= cookie2.getName() %><br/> 쿠키 값: <%= cookie2.getValue() %> <p><a href="getCookies.jsp">Next Page to view the cookie value</a></p> </body> </html> 제11장

3. 쿠키의 활용 쿠키의 활용 방법 쿠키를 생성하여 응답전송(response)을 했다면 브라우저는 그 다음 요청전송부터 request 객체에 자신이 저장해 놓은 모든 쿠키를 전송. 클라이언트로부터 요청전송(request)된 쿠키 얻어오기 request.getCookies()는 request 객체에 포함되어 있는 모든 쿠키를 배열 형태로 리턴한다. (만약 쿠키가 없을 경우 null을 리턴.) "name"인 쿠키의 값을 변경하기 위해서는 다음과 같이 같은 이름을 지닌 새로운 Cookie 객체를 생성해서 응답 데이터에 추가 Cookie[] cookies = request.getCookies(); Cookie[] cookies = new Cookie("name", URLEncoder.encode("새로운 쿠키 값“)); response.addCookie(cookie); 제11장

3. 쿠키의 활용 쿠키의 활용 방법 쿠키 값을 변경하기 전 해당 쿠키가 존재하는지 확인하는 절차 쿠키 삭제 방법 Cookie[] cookies = request.getCookies(); if(cookies != null && cookies.length > 0){ for(int i = 0; i < cookies.length; i++){ if(cookies[i].getName().equals("name")){ Cookie cookie = new Cookie("name", URLEncoder.encode("새로운 쿠키 값“)); response.addCookie(cookie); } cookie.setMaxAge(0); response.addCookie(cookie); 제11장

3. 쿠키의 활용 쿠키의 활용 예제 [예제 11.4-2] jspbook\ch11\getCookies.jsp 제11장 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import="java.net.URLDecoder" %> <html> <head><title>쿠키 목록</title></head> <body> 쿠키 목록<br/> <% Cookie[] cookies = request.getCookies(); // request 객체로부터 전송된 모든 쿠키를 얻어온다. if (cookies != null && cookies.length > 0) { for (int i = 0 ; i < cookies.length ; i++) { %> //쿠키의 이름과 값을 얻어온다. <%= cookies[i].getName() %>=<%= URLDecoder.decode(cookies[i].getValue()) %><br/> <% // JSESSIONID는 세션의 ID로서 } // 기본적으로 Tomcat이 생성하여 } else { // 쿠키로 저장시킴 %> 전송 받은 쿠키가 없습니다. } </body> </html> 제11장

3. 쿠키의 활용 쿠키의 활용 예제 [예제 11.4-3] jspbook\ch11\deleteCookies.jsp 제11장 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 <%@ page contentType="text/html;charset=utf-8" %> <%@ page import = "java.net.URLEncoder" %> <% Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0) { for (int i = 0 ; i < cookies.length ; i++) { if (cookies[i].getName().equals("name")) { cookies[i].setMaxAge(0); response.addCookie(cookies[i]); } %> <html> <head><title>쿠키 삭제</title></head> <body> name 쿠키만 삭제하고 date 쿠키는 남아 있습니다. <p><a href="getCookies.jsp">Next Page to view the cookie value</a></p> </body> </html> // name 이름을 지닌 쿠키에 대한 삭제 제11장

3. 쿠키의 활용 쿠키의 유효시간 설정 예제 [예제 11.4-4] jspbook\ch11\create1hourCookie.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 <%@ page contentType="text/html;charset=utf-8" %> <% Cookie cookie = new Cookie("cookieTime", "1 hour"); cookie.setMaxAge(60 * 60); // 3600(60*60)초 = 1시간 response.addCookie(cookie); %> <html> <head><title>쿠키유효시간설정</title></head> <body> 유효시간이 1시간인 cookieTime 쿠키 생성. <p><a href="getCookies.jsp">Next Page to view the cookie value</a></p> </body> </html> 브라우저를 닫으면 쿠키는 자동으로 삭제됨. 유효시간을 설정함으로써 브라우저를 닫더라도 남아있음. 제11장

3. 쿠키의 활용 쿠키의 경로 설정에 대한 일반적인 방법 [Note] setPath() 메소드의 일반적인 활용법 일반적으로 쿠키는 웹 어플리케이션에 포함된 대부분의 JSP, 서블릿에서 공통으로 사용되는 경우가 많기 때문에 대부분의 쿠키는 경로를 "/"로 지정한다. 즉, 생성된 쿠키가 cookie 라면 cookie.setPath("/")를 호출하면 된다.   제11장

4. 쿠키를 활용한 아이디 기억하기 구현 login2.jsp에 id 쿠키를 찾는 기능을 추가. 제11장

4. 쿠키를 활용한 아이디 기억하기 구현 쿠키를 활용한 ID 기억하기 예제 [예제 11.5-1] jspbook\ch11\login2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 <%@ page contentType="text/html;charset=utf-8" %> <html> <head><title>로그인</title></head> <% boolean isIDShow = false; String id = null; Cookie[] cookies = request.getCookies(); // 요청전송된 모든 쿠키 얻어오기 if (cookies != null && cookies.length > 0) { for (int i = 0 ; i < cookies.length ; i++) { if (cookies[i].getName().equals("id")) { isIDShow = true; id = cookies[i].getValue(); } // 브라우저를 닫고 다시 브라우저를 열고 login2.jsp를 재접속하면 브라우저가 있는 } // 클라이언트로부터 id 쿠키가 자동으로 요청전송되고 Tomcat은 login2.jsp를 처리할 때 } // id 쿠키를 발견하여 ID값을 입력폼에 나타나게 함. %> <body> 관리자 (Master)로 로그인하세요.<br/> 제11장

4. 쿠키를 활용한 아이디 기억하기 구현 쿠키를 활용한 ID 기억하기 예제 [예제 11.5-1] jspbook\ch11\login2.jsp 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <form action="loginProcess2.jsp" method="post"> <% if (isIDShow) { %> ID : <input type="text" name="id" value="<%= id %>"> <input type="checkbox" name="idstore" value="store" checked>아이디 기억하기 </input><br/> } else { ID : <input type="text" name="id"> <input type="checkbox" name="idstore" value="store">아이디 기억하기</input><br/> } Password : <input type="password" name="pw"><br/> <input type="submit" value="전송"> </body> </html> 제11장

4. 쿠키를 활용한 아이디 기억하기 구현 쿠키를 활용한 ID 기억하기 예제 [예제 11.5-2] jspbook\ch11\loginProcess2.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <%@ page contentType="text/html;charset=utf-8" %> <% String storedID = application.getInitParameter("MasterID"); String storedPW = application.getInitParameter("MasterPassword"); String id = request.getParameter("id"); String pw = request.getParameter("pw"); if (id.equals(storedID) && pw.equals(storedPW)) { // 아이디와 패스워드 모두 일치 session.setAttribute("MasterLoginID", id); // 로그인 성공 하면 session 속성 설정 %> <html> <head><title>로그인 처리</title></head> <body> 로그인에 성공했습니다. <br/><br/> <a href="loginCheck.jsp">로그인 체크</a> </body> </html> 제11장

4. 쿠키를 활용한 아이디 기억하기 구현 쿠키를 활용한 ID 기억하기 예제 [예제 11.5-2] jspbook\ch11\loginProcess2.jsp 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <% // idstore 체크박스에 사용자가 체크했는지 판단하기 위해 request의 idstore 값을 얻어옴 String IDStore = request.getParameter("idstore"); // 만약 true라면 체크박스에 체크되었다고 판단 if (IDStore != null && IDStore.equals("store")) { // 사용자 id를 담고 있는 id 쿠키 객체를 응답전송하여 브라우저에 저장시킴 Cookie cookie = new Cookie("id", id); response.addCookie(cookie); // 브라우저를 닫고 다시 브라우저를 열고 login2.jsp를 재접속하면 브라우저가 있는 // 클라이언트로부터 id 쿠키가 자동으로 요청전송되고 Tomcat은 login2.jsp를 처리할 때 // id 쿠키를 발견하여 ID값을 입력폼에 나타나게 함. out.println("<a href='login2.jsp'>로그인 화면 다시 보기</a>"); } } else if (id.equals(storedID)) { // 아이디 일치 & 패스워드 불일치 %> <script> alert("패스워드가 다릅니다."); history.go(-1); </script> 제11장

4. 쿠키를 활용한 아이디 기억하기 구현 쿠키를 활용한 ID 기억하기 예제 login2.jsp를 다시 수행한 모습 [예제 11.5-2] jspbook\ch11\loginProcess2.jsp 32 33 34 35 36 37 38 39 40 } else { // 아이디 불일치 %> <script> alert("로그인 ID가 다릅니다."); history.go(-1); </script> <% } 제11장