본문 바로가기
웹 개발 언어/JSP&Servlet

Cookie & Session 쿠키와 세션-1

by 0725 2022. 4. 21.

html의 한계
서버에는 자원의 한계가 있는데 클라이언트가 접속할때마다 서버에 클라이언트가 접속해있는 상태가 유지되기 때문에 자원을 많이 쓴다.

HTTP의 한계 
비연결형이기 때문에 로그인 해도 로그인 정보가 누적되지 않는다.

Cookie & Session

Client의 정보를 지속적으로 유지하기 위한 방법


cookie란?

  • 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 파일 또는 메모리에 저장하는 작은 기록 정보 파일
  • 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있음
  • 드러나도 되는 정보를 저장(장바구니, 최근 검색어 .. 등)

cookie의 동작원리

 

cookie의 데이터타입 

- String

 

cookie의 단점?

-클라이언트의 하드에 저장하기 때문에 보안성 낮음 -> 암호화해서 사용해야함!

 

cookie 위치 확인하기

- 4KB이하로 제한, 300개 데이터 정보 배열

즉, 최대 쿠키 용량은 4KB X 300개 = 1.2MB


Cookie 만들기 실습을 해보자!

 

  • 쿠키 객체 생성

Cookie cookie = new Cookie(쿠키이름, 쿠키값);

<%@page import="java.net.URLEncoder"%>
<%@ 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>쿠키 굽는중</h1>
<%
	// 쿠키 객체 생성
	// 쿠키는 아스키코드로 구성이 되어야해서 한글 사용 불가능!
	// 한글 사용하려면 인코딩(문자를 코드화 하는 과정) 진행
	// URLEncoder.encode(인코딩 진행할 String, 인코딩방식)	
	Cookie cookie = new Cookie("id", URLEncoder.encode("이서연", "UTF-8"));
	Cookie cookie2 = new Cookie("age","20");
	
	// 쿠키의 기한 설정
	// setMaxage(초단위정수), 기본값 1년
	// 쿠키는 삭제가 불가능, 대신 기한을 0으로 만들어서 만들자마자 지우기
	cookie.setMaxAge(60*60);
	
	// 쿠키 전송
	// 쿠키는 응답할 때 같이 전송이 되므로 response객체 사용
	response.addCookie(cookie);
	response.addCookie(cookie2);
	
%>
</body>
</html>

 

 

결과 확인하기

<%@ 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>내가 구운 쿠키는?</h1>
	<%
	// request객체 사용해서 쿠키 조회하기
	// 쿠키의 리턴타입은 배열이다
	// Client가 새로운 요청을 보낼 때 쿠키를 가지고 요청을 진행한다
	// 인코딩 된 문자는 꼭 디코딩(코드를 문자로 변환) 해서 출력해야한다
    
	Cookie[] cookies = request.getCookies();

	for (int i = 0; i < cookies.length; i++) {
		out.print("쿠키이름 : " + cookies[i].getName() + "<br>");
		out.print("쿠키값 : " + cookies[i].getValue() + "<br>");
		out.print("<hr>");
	}
	%>
	<hr>
	<!-- for-each문과 표현식 사용해서 출력해보기 -->
	<!-- for-each문
		for(변수명-배열을 대신할 : 배열) -->
	
	<h1>표현식/for-each문</h1>
	<%
	for(Cookie c:cookies){%>
		쿠키이름 : <%=c.getName() %> <br>
		쿠키값 : <%= c.getValue() %> <br>
		<hr>
	<%}%>
</body>
</html>

 

실행 결과

댓글