쿠키(cookie)
HTTP 프로토콜 통신을 하는 경우 요청에 대한 응답을 수행하는 경우 연결 지속X(상태유지X)
=> 상태를 유지하기 위해서 쿠키 사용 (커피쿠폰)
- 이름, 값, 유효기간, 도메인, 경로.. 으로 구성
- 정보는 알파벳과 숫자로 구성
- 쿠키는 사용자의 컴퓨터 하드디스크에 저장(보안에 위험)
쿠키(객체) 생성
Cookie cookie = new Cookie(이름, 값);
쿠키정보 전달
response.addCookie(cookie);
C:\Users\ITWILL\AppData\Local\Google\Chrome\User Data\Profile 5\Storage\ext\nmmhkkegccagdldgiimedpiccmgmieda\def\Cache\Cache_Data
ITWILL : 윈도우 계정명
- [ ] 숨긴항목체크 해제
크롬 - 설정 - 쿠키삭제
쿠키를 만들고 사용해보자
cookieTest.jsp 파일 생성
<h1> cookieTest.jsp </h1>
<h2> 클라이언트(나)</h2>
<input type="button" value="쿠키값 생성" onclick="location.href='cookieSet.jsp';">
쿠키 생성 (서블릿 API)
Cookie cookie = new Cookie();
생성자의 조건
- 첫문자는 대문자
- 클래스명과 같음
- 리턴타입이 없음(메서드-리턴타입 있어야함)
변수 사용 규칙
- 변수 선언
- 변수 초기화
- 변수 사용
오버로딩 메서드(생성자)
⇒ 오버로딩된 생성자가 있을 경우 기본생성자는 자동 생성 불가!
public Cookie(int a, int b) {
// 오버로딩 메서드(생성자)
// => 오버로딩된 생성자가 있을 경우
// 기본생성자는 자동 생성 불가!
}
<h1> cookieSet.jsp </h1>
<h2> 서버(카페) </h2>
<%
System.out.println("클라이언트 요청처리 중...(커피 만드는 중..)");
// 쿠키 생성(서블릿 API)
Cookie cookie = new Cookie("name","ITWILL"); // 오류발생! The constructor Cookie() is undefined : 생성자가 정의되어있지 않다.
// 클래스명 생성자-첫문자가 대문자이기 때문에 메서드가 될 수 없음
// 클래스) 1. 멤버변수 2. 메서드 3. 생성자
//쿠키 설정(유효기간[단위:s(초)])
cookie.setMaxAge(10 * 60); // 10분
// 쿠기정보 전달
response.addCookie(cookie);
%>
<script type="text/javascript">
alert("요청처리완료! 쿠키생성완료!");
location.href="cookieTest.jsp";
</script>
정보가 유지되어있음
쿠키값 확인
<%@ 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>
<h1> cookieTest.jsp </h1>
<h2> 클라이언트(나)</h2>
<%
// 쿠키값 확인
// 쿠키정보 가져오기
Cookie[] cookies = request.getCookies();
// 쿠키정보 저장변수
String value = "";
// 내가 만든 쿠키가 있는지 체크(배열에 들어있는 값을 찾기)
if(cookies != null) {
for(int i=0;i<cookies.length; i++) {
// 쿠키 정보 확인
if(cookies[i].getName().equals("name")) {
// 내가만든 쿠키가 있다.
value = cookies[i].getValue();
}
}
}
%>
<h2> 쿠키값: <%=value %></h2>
<input type="button" value="쿠키값 생성" onclick="location.href='cookieSet.jsp';">
</body>
</html>
- 쿠키는 브라우저를 껐다켜도 정보가 유지되어있음 ⇒ 그래서 쿠키를 쓰는겨!!
- 유효기간이 다되면 쿠키가 사라질까? No. 하드디스크에 없을 뿐, 안사라짐 (유효기간이 지난 쿠폰같은 느낌)
정리!!!!!!
※쿠키도, 세션도 상태유지하기위해 사용하는 개념임
세션 : 정보를 서버에 저장 해놓고, 브라우저가 유지 되는 동안 쓸 수 있음(도도포인트)
쿠키 : 서버가 만든걸 클라이언트에 줘서 하드디스크에 저장해놓고, 필요할때마다 가져씀(종이쿠폰)
쿠키정보 삭제 ⇒ 쿠키의 유효기간 삭제
<%@ 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>
<h1> cookieDel.jsp </h1>
<h2> 서버(카페) </h2>
<%
// 쿠키정보 삭제 (종이쿠폰) => 쿠키의 유효기간 삭제
// 카페주인이 쿠폰을 없앨 수 있냐? 불가능 -> 못쓰게 할 순 있음(유효기간 설정)
// 서버가 클라이언트 하드디스크에 접근해서 파일을 삭제할 수 없음(해킹 개념)
// 쿠키를 직접 삭제할 수 없으니 유효기간을 다 쓰게한다!
// 쿠키정보 가져오기
Cookie[] cookies = request.getCookies();
// 내가 만든 쿠키 찾기
if(cookies != null) {
for(int i=0;i<cookies.length;i++) {
if(cookies[i].getName().equals("name")) {
// 내가 만든 쿠키 찾음!
// 유효기간 재설정
cookies[i].setMaxAge(0); //유효기간을 0초로 두어 못쓰게함
// 다시 클라이언트로 전송(새 쿠폰)
// => 클라이언트의 쿠폰 유효기간이 살아있음. 변경된 쿠키를 보내 덮어써야함!
response.addCookie(cookies[i]);
}
}
}
%>
<script type="text/javascript">
alert("쿠키 삭제 완료!");
location.href="cookieTest.jsp";
</script>
</body>
</html>
<form action="">
<input type="radio" name="language" value="kor">한국어
<input type="radio" name="language" value="eng">영어
<input type="submit" value="언어 설정">
</form>
action값이 있어야 페이지 이동,
action 속성 값이 없을 경우 자신의 페이지 호출함
action 값 주기
get방식으로 cookiePro.jsp 페이지 호출하기
그러러면 cookiePro.jsp 페이지 필요
쿠키를 통해서 언어 설정(파라메터 사용)
request.getParameter("language");
Cookie cookie = new Cookie("lang",lang);
Cookie cookie = new Cookie("lang",request.getParameter("language"));
// 이름(lang), 값request.getParameter("language)
위의 두 코드는 같은 식.
쿠키 사용 설정(유효기간 설정-s)
cookie.setMaxAge(60*60); // 1시간
쿠키 정보를 클라이언트로 전달
response.addCookie(cookie);
System.out.println("쿠키생성!");
response.sendRedirect("cookieForm.jsp");
<script type="text/javascript">
alert("언어정보 쿠키 설정 완료");
location.href="cookieForm.jsp";
</script>
설정된 언어값을 사용하여 메세지 출력
한국어(kor) = "안녕하세요! 쿠키 테스트 입니다!” 영어(eng) - "Hello! Cookie Test!!”
<%
String lang ="kor"; // 기본 언어 설정값을 kor로
// 쿠키값을 모두 가져오기(배열)
Cookie[] cookies = request.getCookies();
// 배열에 들어있는 요소중에서 언어설정 값을 찾기
if(cookies != null) {
for(int i=0;i<cookies.length;i++) {
if(cookies[i].getName().equals("lang")) {
// 해당요소가 있을 때 (언어설정값)
lang=cookies[i].getValue();
}
}
}
// 값이 존재할 때 메세지 출력
%>
<h2> 쿠키값 : <%=lang %> </h2>
<%
if(lang.equals("kor")) {
%>
<h2> 안녕하세요! 쿠키 테스트입니다! </h2>
<%
} else {
%>
<h2> Hello~! Cookie Test!! </h2>
<%
}
%>
}
<form action="cookiePro.jsp" method="get">
<input type="radio" name="language" value="kor"
<%if(lang.equals("kor")){%>
checked
<%} %>
>한국어
<input type="radio" name="language" value="eng"
<%if(lang.equals("eng")){%>
checked
<%} %>
>영어
<input type="submit" value="언어 설정">
</form>
한국어면 kor체크, 영어면 eng체크
'JSP·Servlet' 카테고리의 다른 글
[JSP] 파일 다운로드 기초편 (0) | 2023.09.21 |
---|---|
[JSP] 파일 업로드 (0) | 2023.09.21 |
[JSP] 영역 객체 (0) | 2023.09.18 |
[JSP] 액션태그, 내장객체 종류와 사용 (0) | 2023.09.18 |
[JSP] 액션태그, 한글을 처리하는 인코딩 설정 (0) | 2023.09.18 |