1.쿠기의 생성과 사용
1) 쿠키의 의미
-사용자 식별 정보
-<이름,값> 을 가지는 작은 크기의 텍스트 데이터
(쿠키에 추가 정보(속성)를 포함시킬 수 도 있음
> 쿠키의 사용
-최초 요청의 처리에서 웹 서버가 쿠키를 만들어 응답 헤더에 포함시킴
-웹 브라우저가 쿠키를 저장했자다, 차후 브라우저가 같은 서버에서 다른 요청을 보낼 때, 저장 중인 쿠키를 요청 헤더에 넣어 보냄.
-서버와 클라이언트 간 상태 정보를 공유함으로써
연이은 여러 요청을 관련지어 처리할 수 있음.
(웹 서버는 쿠키정보를 이용하여 사용자 를 식별할 수 있음.)
2)요청과 응답에서 쿠키의 전송
Cookie: name=Jimmy; phone=010-1111-2222
Set-Cookie:name+Jimmy; Max_Age = 1000;
Expires=Thu, 23-Aug-2021 11:46:52 GMT
Set-Cookie: phone=010-1111-2222; Domain=java.oracle.com
요청 =>응답(쿠키)=>요청(쿠키) ->응답(쿠키)=>요청(쿠키) =>웹 서버
3)쿠키의 구성
-하나의 쿠키는 하나의 <이름,값>을 가짐
(이름과 값은 알파벳과 숫자로 구성된 문자열)
-쿠키는 추가 정보를 가질 수 있음
+유효 시간: 쿠키의 지속 시간
+도메인: 쿠키를 만들고 이용할 서버를 지정
+경로: 쿠키가 보내질 서버의 경로를 지정
+주석: 쿠키의 목적을 설명
-추가 정보는 브라우저에서 기억하고 있음
4)쿠키의 생성과 전송
>쿠키의 생성
-서버 측 jsp 페이지에서 Cookie 클래스의 객체를 생성함
(new Cookie(String name, String value)
>생성된 쿠키의 전송
-response.addCookie(Cookie)는 응답 헤더에 쿠키 하나를 추가한다
(쿠키를 전송하기 전에 추가 정보를 설정할 수 있음)
5)Cookie클래스의 메소드
>메서드 설명
메서드 | 리턴타입 | 기능 |
getName() | String | 쿠키의 이름을 리턴한다. |
getValue() | String | 쿠키의 값을 리턴한다. |
setValue(String value) | void | 쿠키의 값을 value로 지정한다. |
setDomain(String patterm) | void | 쿠키가 전송될 서버의 도메인을 지정한다. |
getDomain() | String | 지정된 쿠키의 도메인을 리턴한다. |
setPath(String uri) | String | 설정된 쿠키의 전송 경로를 리턴한다. |
setMaxAge(int time) | Void | 쿠키의 유효시간을 초 단위로 설정한다. 시간을 음수로 지정할 경우 웹 브라우저가 종료되면 쿠키와 함께 삭제된다. 기본 값은 -1이다. |
getMaxAge() | String | 쿠키의 유효 시간을 리턴한다. |
2.쿠키 값 읽기,변경,삭제
1)쿠키 생성하기
2)쿠키 값 읽기
-JSP페이지에서 클라이언트가 보낸 쿠키를 읽을 때는
request.getCookie()를 사용
= 웹 브라우저로부터 전송된 Cookie객체들의 배열을 리턴함
3)쿠키의 유효 시간
-정보의 공유를 위해 브라우저가 쿠키를 저장하는 기간
=쿠키 생성 후 Cookie클래스의
setMaxAge(int seconds)를 사용하여 지정
=유효 시간이 경과된 쿠키는 웹 브라우저에서 자동 삭제됨
=유효 시간을 0으로 하면 기존 쿠키를 삭제하는 것
-시간 설정을 하지 않으면 웹 브라우저가 종료될 때 쿠키가 삭제됨
(기본 값인 -1로 설정됨)
4)쿠키 값의 변경과 쿠키 삭제
>쿠키 값의 변경
-같은 이름의 Cookie객체를 만들고 또는 변경하려는 Cookie객체의 값을 바꾼 후 응답에 쿠키를 추가함
>쿠키의 삭제
-쿠키 값의 변경 방법과 유사
-삭제하고자 하는 Cookie 객체 또는 같은 이름의 객체를 이용함.
유효 시간을 0으로 한 후 응답에 쿠키를 추가함
5)쿠키 값 변경
>쿠키 생성과 응답
>같은 이름의 쿠키를 가지고 값을 변경
6)쿠키 삭제
-유효 시간을 0으로 설정한 후 응답
3.쿠키의 도메인과 경로
1)쿠키의 도메인
>요청시 쿠키의 전송(클라이언트에서 서버로)
-기본적으로 쿠키는 그것을 보낸 서버에게만 전송 될 수 있음
=http://www.oracle.com/JSP/create_cookie.jsp에서 생성된 쿠키는 http://www.oracle.com으로 로 시작되는 페이지에 접속할 때만 전송됨
=예를 들어 java.oracle.com로 시작되는 페이지에는 전송되지 않음
-쿠키에 도메인 설정을 하면 같은 도메인 상에 있는 다른 호스트들과 쿠키를 공유할 수 있음
=cookie.setDomain(".oracle.com")
>쿠키의 도메인 설정
=쿠키를 이용할 도메인을 정하는 것
=Cookie클래스의 setDomain(String domain)을 사용
-서버는 자신이 속한 도메인 내에서 쿠키의 도메인을 설정할 수 있음
=예:java.oracle.com에서는 setDomain("java.oracle.com)" setDomain(".oracle.com")이 가능
-쿠키를 생성한 서버의 주소와 관련이 없는 도메인은 의미가 없음
2)쿠키의 경로
>쿠키의 경로 설정
-클라이언트가 서버에 요청을 보낼 때, 쿠키를 보낼 서버 상의 경로를 정하는 것
=경로는 url에서 서버 주소 이후에 나오는 부분을 의미함.
=http://localhost:8080/HelloJSP/8-1. jsp에서 경로는 /HelloJSP
=지정 경로(하위 경로 포함)에 있는 페이지에만 쿠키를 보냄
=경로를 지정하지 않으면 쿠키를 만든 페이지가 위치한 경로로 설정됨
-Cookie클래스의 setPath(String uri)을 사용
>동적 웹 프로젝트의 폴더 구성
4.쿠키를 이용한 로그인 구현
1)쿠키를 이용하여 로그인 구현하기
>HTTP 프로토콜의 stateless특성
-서버가 응답을 보낸 후에는 클라이언트에 대해 알지 못함
--a.jsp요청과 계속된 b.jsp요청은 서로 무관함.
-상태 관리를 위해 쿠키나 세션을 이용해야 함
>쿠키를 이용한 로그인/로그아웃 절차
-아이디와 비밀번호를 입력할 수 있는 폼을 제시
-사용자가 입력한 아이디, 비밀번호를 읽고, 가입된 회원인지 판단
-가입된 회원이라면, 로그인 상태에서 사용할 쿠키를 생성
-이후 페이지를 방문할 때에는 서버가 클라이언트가 보낸 쿠키를 가지고 로그인 여부를 판단
-로그아웃을 하면 사용했던 쿠키를 삭제
>로그인을 위한 입력 폼 (8-8.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<body>
<form action="8-9.jsp" method="post">
아이디 <input type= 'text" name="id"><br>
비밀번호 <input type= 'password" name="pw"><br>
<input type="submit" value="확인">
</form>
</body>
</html>
>로그인 처리
-로그인을 위해 회원 DB를 이용하는 부분은 생략함
-로그인 요청이 성공하면 쿠리를 생성해 응답 헤더에 포함시킴
-차후의 요청에서 이 쿠키가 요청 헤더에 포함됨.
-아이디가 "admin", 비밀번호 "pass"이면 쿠키를 생성함(로그인 성공)
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
if(id.equals(" admin") & pw.equals("pass")) {
Cookie cookie = new Cookie("ID","ADMIN");
response.addCookie(cookie);
out.print("<h3>로그인 성공</h3>");
} else {
out.print("<h3> 로그인 실패</h3>");
}
%>
<h3><a href="8-10.jsp" 로그인 확인</a></h3>
</body>
-쿠키의 이름과 값을 확인하여 로그인 여부를 확인
<%
Cookie[]cok
8-10.jsp
-쿠키를 삭제하여 로그아웃 처리
8-11.jsp
하루 만에 채팅 앱 만들기 _라이프해킹스쿨 강의 수강 (0) | 2022.11.26 |
---|---|
[3강. JSP개요]JSP프로그래밍 _예제모음 (0) | 2022.11.19 |
[2강.JSP 프로그래밍 개발 환경 설정하기] JSP프로그래밍 (0) | 2022.11.13 |
[1강.웹과 자바]JSP프로그래밍 (0) | 2022.11.12 |
방송통신대학교 과제를 끝마치며 [UNIX시스템] 30점 (0) | 2022.11.11 |