https://www.youtube.com/playlist?list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9

쿠키

웹브라우저에서 서버로 어떤 데이터를 요청하면(request), 서버에서는 알맞은 로직을 수행 한 후 데이터를 웹브라우저에 응답한다(response).

그리고, 서버는 웹브라우저와의 관계를 종료한다. 응답 후 관계를 끊는 것은 http 프로토콜의 특징이다.

따라서, 연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키 를 사용한다.

쿠키는 서버에서 생성하여, 서버가 아닌 클라이언트 측에 특정 정보를 저장합니다. 그리고 서버에 요청 할 때마다 쿠키의 속성값을 참조하거나 변경할 수 있다.

쿠키는 4kb 로 용향이 제한적이며, 300개까지 데이터 정보를 가질 수 있다.

로컬 상에 텍스트가 있으므로 해킹의 위험이 있다. 점차 사용하지 않는 추세이다.

생성 방법

쿠키는 서버에서 샡성되고, 클라이언트에 전송되어 저장된다.

  1. 쿠키 생성: 쿠키 클래스를 이용한다.
  2. 속성 설정: setter 를 이용한다.
  3. response 객체에 쿠키 탑재: response.addCookie() 를 이용한다.
  4. 쿠키를 삭제한다.

메소드

  • setMaxAge(), getMaxAge(): 유효기간
  • setPath(), getPath(): 유효 디렉토리 - 어떤 파일까지 사용 가능한지
  • setValue(), getValue(): 값 설정
  • setVersion(), getVersion(): 버전 설정
  • getName()

예제

<!-- cookieset.jsp -->
<%
	Cookie cookie = new Cookie("cookieName", "cookieValue");
	cookie.setMaxAge(60*60);	//1시간
	response.addCookie(cookie);
%>

<a href="cookieget.jsp">cookie get</a>
<!-- cookieget.jsp -->

<%
	Cookie[] cookies = request.getCookies();

	for(int i=0; i<cookies.length; i++) {
		String str = cookies[i].getName();
		if(str.equals("cookieName")) {
			out.println("cookies[" + i + "] name : " + cookies[i].getName() + "<br />");
			out.println("cookies[" + i + "] value : " + cookies[i].getValue() + "<br />");
			out.println("=====================<br />");
		}
	}
%>

<a href="cookiedel.jsp">cookie delete</a>
<!-- cookiedel.jsp -->
	<%
		Cookie[] cookies = request.getCookies();
		for(int i=0; i<cookies.length; i++) {
			String str = cookies[i].getName();
			if(str.equals("cookieN")) {
				out.println("name : " + cookies[i].getName() + "<br />");
				cookies[i].setMaxAge(0); //삭제
				response.addCookie(cookies[i]); //수정하거나 삭제 할 때 다시 탑재해야
			}
		}
	%>

	<a href="cookietest.jsp">쿠키확인</a>

<!-- cookietest.jsp -->

<%
	Cookie[] cookies = request.getCookies();
	if(cookies != null) {
		for(int i=0; i<cookies.length; i++){
			out.println(cookies[i].getName() + "<br />");
			out.println(cookies[i].getValue() + "<br />");
		}
	}
%>

쿠키로 로그인 & 로그아웃 구현

DB 연결 없이 특정 아이디와 비밀번호를 판단하는 로그인/아웃을 구현한다.

<!-- login.html  -->
<form action="loginOk.jsp" method="post">
	아이디 : <input type="text" name="id" size="10"><br />
	비밀번호 : <input type="password" name="pw" size="10"><br />
	<input type="submit" value="로그인">
</form>
<!-- loginOk.jsp -->

<%!
	String id, pw;
%>
<%
	id = request.getParameter("id");
	pw = request.getParameter("pw");

	if(id.equals("abcde") && pw.equals("12345")) {
		Cookie cookie = new Cookie("id", id); //쿠키제작
		cookie.setMaxAge(60); //시간 설정
		response.addCookie(cookie); //응답 객체에 결부
		response.sendRedirect("welcome.jsp"); //성공
	} else {
		response.sendRedirect("login.html"); //실패
	}
%>
<!--welcome.jsp  -->
<%
	Cookie[] cookies = request.getCookies();

	for(int i=0; i<cookies.length; i++) {
		String id = cookies[i].getValue();
		if(id.equals("abcde")) out.println(id + "님 안녕하세요." + "<br />");
	}
%>

<a href="logout.jsp">로그아웃</a>
<!-- logout.jsp  -->
<%
	Cookie[] cookies = request.getCookies();

	if(cookies != null) {
		for(int i=0; i<cookies.length; i++) {
			if(cookies[i].getValue().equals("abcde")){
				cookies[i].setMaxAge(0);
				response.addCookie(cookies[i]);
			}
		}
	}

	//response.sendRedirect("login.html");
	response.sendRedirect("cookietest.jsp");
%>