JspServlet #9 Cookie & Session

장서영·2023년 11월 1일

JspServlet

목록 보기
7/11

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


→session에 저장하는게 상대적으로 더 안정적
→ 모든 사람들의 기록을 가지고 있느라 비용이 든다.

  • Cookie
    -전달할 데이터를 web browser(client)로 보냈다가 web server로 되돌려 받는 방법
    -web페이지 방문 시 브라우저에서의 정보들이 저장된 텍스트파일

    크롬 쿠키 확인하는 방법(보기에서 숨긴항목보기 체크)
    생성 및 동작 과정


쿠키 기본 실습

쿠키 만들기

<%@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>
<ol>
	Cookie : Client의 정보를 유지하기 위해서 사용하는 방법
	<li> 저장 위치 : Client Pc</li>  
	<li> 보안 : 취약</li> 
	<li> 자원 : Client의 자원을 사용해서 Server에 영향 x</li> 
	<li> 용량 : 쿠키 1개당 4KB x 300ro  = 1.2MB </li> 
	<li> 저장형식  : 텍스트만 저장 가능, 영아만 가능(한글은 인코딩 필요)</li>
</ol>
<%
	// 1. 쿠키 객체 생성
	// new Cookie("쿠키이름","쿠키 값");
	// 한글이라면 한글인코딩 -> URLEncoder 객체 사용
	Cookie cookie =  new Cookie("name",URLEncoder.encode("장서영", "UTF-8"));
	// 2. 쿠키의 기한 설정 쿠키의 객체에 ! 1시간
	// 양수 : 초 단위로 해당 기한만큼 쿠기를 유지
	// 음수 : 브라우저 종료 시 쿠키가 제거
	// 0 : 제거
	cookie.setMaxAge(3600);	
	//3. 쿠키 전송
	// 쿠키는 응답할 때 clientPC로 전송 -> response객체 사용
	response.addCookie(cookie);	
%>
</body>
</html>

쿠키 조회하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.net.URLDecoder"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2> 쿠키 조회하기 </h2>
<%
	//4. 쿠키 조회하기
	//Server가 따로 요청하지 않아도, request객체이서 조회 가능
	//배열 형태로 가져옴
	Cookie[] cookies = request.getCookies();	
	for(int i = 0 ; i < cookies.length; i++){	
		out.print("쿠키 이름 : "+cookies[i].getName()+"<br>");
		out.print("쿠키 값 : "+ URLDecoder.decode(cookies[i].getValue(),"UTF-8") +"<hr>");
	}
%>
</body>
</html>

쿠키 목록 만들기 실습


컴퓨터

<h3> 
모델명 : 맥북 <br>
가격 : 2,450,000</h3>
<a href="List.jsp"> 제품 목록 페이지로 돌아가기</a>
<%
//쿠키 생성
	Cookie cookie = new Cookie("item2",
			URLEncoder.encode("컴퓨터","UTF-8"));
	response.addCookie(cookie);
%>

마우스

<h1> 마우스 상세 페이지 </h1>
<br><br>
<h3>모델명 : 로지텍 마우스 <br>
	가격 : 100,000</h3>
<a href="List.jsp"> 제품 목록 페이지로 돌아가기</a>
<%
//쿠키 생성
	Cookie cookie = new Cookie("item1",
			URLEncoder.encode("마우스","UTF-8"));
	response.addCookie(cookie);
%>

핸드폰

<h3> 
모델명 : 아이폰 13pro max <br>
가격 : 1,450,000</h3>
<a href="List.jsp"> 제품 목록 페이지로 돌아가기</a>
<%
//쿠키 생성
	Cookie cookie = new Cookie("item3",
			URLEncoder.encode("핸드폰","UTF-8"));	
	response.addCookie(cookie);
%>

삭제

<%
	//쿠키 삭제 -> 쿠키의 기한을 0으로 설정
	Cookie [] cookies = request.getCookies();	
	//쿠키의 이름에 item이 포함된 쿠키만 기한을 0으로 설정
	for(Cookie c :cookies){		if(c.getName().contains("item")){
			c.setMaxAge(0);
		// 쿠키가 업데이트될 때에는 다시 쿠키 보내기
			response.addCookie(c);
		}
	}	response.sendRedirect("./List.jsp");
%>

List

</ul>
<hr>
<h1> 최근 본 상품</h1>
<%
//최근 본 상품 조회
	// 1. 쿠키 조회
Cookie[] cookies = request.getCookies();
// 2. 쿠키 이름에 item이 있다면 웹에 출력
//	for(int i = 0 ; i < cookies.length; i++){	
//		if(cookies[i].getName().contains("item")){
//		out.print(URLDecoder.decode(cookies[i].getValue(),"UTF-8"));
//	}
//}	
	for(Cookie c :cookies){
		//만약에 쿠키이름에 item 들어있다면
		// if 쿠키이름.contains("item")
		if(c.getName().contains("item")){
			//웹에 출력 -> 디코딩
			out.print(URLDecoder.decode(c.getValue(),"UTF-8")+"<br>");
		}
	}
%>
<hr>
	<a href="Delete.jsp">최근 본 상품 삭제</a>

session


전달 과정

-session id값을 가지고 있는 쿠키를 클라이언트에게 전달
-id값만 저장한다.
1. 각 클라이언트에게 고유 id를 부여
2. 보안 면에서 쿠키보다 우수
3. 사용자가 많아질 수록 서버 메모리를 많이 차지하게 됨
브라우저 창을 끄면 session이 사라진다.
ex) 로그인 같이 보안 상 중요한 작업을 수행할 때 사용

세션 기본 실습

makesession

<h1> 세션 만들기 </h1>
<ol>
	Session : Client의 정보를 유지하기 위해서 사용하는 방법
	<li> 저장 위치 : ServerPC </li>  
	<li> 보안 : 우수 </li> 
	<li> 용량 : 서버가 허용하는 만큼 가능 </li> 
	<li> 저장형식 : 객체 저장 가능 </li>
</ol>
	<%
		// 1. 세션 값 설정 setAttribute(name(String),value(object))
			// 객채 오브젝트 업캐스팅 되어서 저장된다
		session.setAttribute("id", "test");//내장객체 이어서 그냥 사용해도 됨
		session.setAttribute("age", 24);		
		// 2. 어차피 서버가 알아서 세션 아이디를 부여해줄 거기 때문에 따로 응답x
		%>
	<a href="Ex04_showSession.jsp">세션확인</a>

showsession

<%
	// 세션 값 가져오기
	// 다운캐스팅 
	String id = (String)session.getAttribute("id");
	Integer age = (Integer)session.getAttribute("age");
	//int는 null값을 못 가지지만 integer는 가능!!
%>
	아이디 : <%=id %><br>
	나이 : <%=age %>
	<a href="Ex05_deleteSession.jsp">세션 삭제</a>

deletesession

<%
	session.removeAttribute("id");
	session.removeAttribute("age");
%>
	<a href="Ex04_showSession.jsp">세션확인</a>

InvalidateSessioin

<%
	// 세션 값 모두 삭제
	session.invalidate(); //무효화하다	
%>
	<a href="Ex04_showSession.jsp">세션확인</a>
profile
영이의 일상은 짱셔요

0개의 댓글