쿠키(cookie) : 웹브라우저에 저장되는 작은 크기의 데이터(클라이언트에 저장)
* 용도
- 서버와 클라이언트가 통신할때 하나의 요청에 대한 응답을 전송하고 나면 서로의 통신은 단절되어 정보를 지속적으로 공유할수 없게 된다. 이런특성을 stateless라고한다.
- 하나의 클라이언트가 여러번 반복적으로 서버에 접속하더라도 서버에서는 이전클라이언트와 동일한 클라이언트가 접속한 것인지 확인할수가없다.
* 지속성의 유지를 위해 쿠키/ 세션을 사용
1)쿠키생성 : 웹서버와 브라우저 양쪽 생성할 수 있다.
- 요청(request) 들어오면 쿠키를 생성하고 응답(reponse)에 쿠키를 보낸다.
- 그다음부터의 요청시마다 쿠키를 확인/공유한다.
2)쿠키저장 : 웹 브라우저 쿠키를 클라이언트 컴퓨터 쿠키저장소에 저장한다.
3)쿠키전송
- 클라이언트 : 한번 저장된 쿠키를 매번 요청시 마다 요청헤더에 포함해서 저장한다.
- 서버 : 전송받은 쿠키를 활용해서 필요한 작업을 지속해 나갈수 있고, 수행후 응답(response)에 쿠키를 헤더에 넣어보낸다.
4) 쿠키구성 : 이름 = 값 , 이름 = 값 , 이름 = 값 ,, 으로 저장
- 이름은 문자만 가능하다.
5) 쿠키의 구성내용 : 유효시간, 경로지정, 도메인 지정
6) 구현
- 생성 : new Cookie(이름, 값)와 같이 생성자를 활용 생성
. response.addCookie(쿠키) 클라이언트에 전송
. request.getCookies() 다음 요청시 쿠키를 읽는다.
- 변경 : 같은 이름에 다른값을 넣어서 생성하면 된다.
- 삭제 : 유효시간을 0으로 설정하면 ,, 서버는 유효시간이 지난 쿠키는 자동 삭제처리한다. setMaxAge(0)
7) 활용
- 유효시간이 종료되지않은 상태라면.. 다른 페이지에서 공유 할수 있다.
- 로그린, 장바구니, 하루만 보여주기 창 등에 활용된다.
8) 쿠키 메소드
- getName() : 쿠키이름 읽기
- getValue() : 쿠키값 읽기
- setValue(String value)
- setPath(String uri) - 쿠키전송경로 결정
- setMaxAge(int time) - 유효시간 설정, 기본값은 -1, 단위는 초단위
- getCookies() - 쿠키를 읽어오기, 배열값으로 온다.
9) JSESSION ID
- 톰캣 컨테이너에서 세션을 유지하기위해 자동 발급되는키
- 세션의 정장소를 생성할때 사용하는 키, 이후 해당 저장소에 다시접근할 떄 사용
* 동작순서
1. 최초접속시 톰캣은 헤더에 JSESSION ID를 발급한다.
2. 발급한 JESSION ID는 쿠키에 저장된다.
3. 만약 다시발급하면 , 톰캣은 저장된 JESSION을 ,request헤더에 담아 서버로온다.
4. 서버는 JESSION ID를 토대로 세션메모리 영역에 상태를 유지할 수 있는 값을 저장한다.
<cookie 값 읽어오기>
cookie값 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Cookie cookie = new Cookie("name", "홍길동");
response.addCookie(cookie);
%>
<a href="jsp2_2.jsp">쿠키 확인하기</a>
</body>
</html>
cookie 값 출력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>(쿠키값 읽는 페이지)요청해온 request객체의 헤더속에 cookie를 꺼내봅시다.</h3>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length>0){
for(int i=0; i<cookies.length; i++){
out.print(cookies[i].getName());
out.print(":");
out.print(cookies[i].getValue());
out.print("<br>");
}
}
%>
</body>
</html>
<특정 cookie 값 삭제>
cookie 객체에는 cookie삭제 메소드가 없음.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/* 특정한 쿠키값 삭제 */
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length>0) {
for(int i=0; i<cookies.length; i++){
if(cookies[i].getName().equals("ID")){ //검색
Cookie cookie = new Cookie("ID",""); //값 변경(삭제)
cookie.setMaxAge(0); //유효시간 0으로 설정 , 유효시간 경과 후 삭제
response.addCookie(cookie);
out.print("쿠키가 삭제 되었습니다."); //별도 삭제 메소드 없음....
}
}
}
%>
</body>
</html>
'JAVA > JSP' 카테고리의 다른 글
JNDI설정 (0) | 2023.06.03 |
---|---|
[JSP] session정리 및 로그인(간단) 구현 (0) | 2023.05.16 |
JSP action tag(액션태그) (0) | 2023.05.15 |
자바빈(JavaBeans) (0) | 2023.05.15 |
Redirect와 Forward (0) | 2023.05.13 |
댓글