
Cookie & Session
→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>