쿠키세션

ㅇ.ㅇ·2022년 6월 22일
http의 한계

http는 비연결형 프로토콜이다

브라우저가 웹서버에게 요청을 주는데
서버는 거기에 응답을한다.html문서로

client가 server로 요청하면 해당page를 client에게 전송한후 응답종료
->연결하고 끊어버림 이게 한계임

쿠키와세션

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

쿠키는 클라이언트pc 웹브라우저가 관련되어있다
세션의 관련된 정보는 웹서버 server pc에 관련되어있다

쿠키

  • 전달할 데이터를 웹 브라우저(클라이언트)로 보냈다가
    web server로 되돌려 받는 방법
  • web페이지 방문시브라우저에 저장되는 방식

쿠키 생성 및 동작과정
1. client의 요청
2. 쿠키를 http response header에 담아서 응답
3. 쿠키를 client의 하드디스크에 저장
4. client가 다시 요청할때 쿠키를 포함해서 요청
5. 응답(쿠키 업데이트시 다시 쿠키 전달)

<%@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>
	
	<%
		//1. Cookie객체 생성
		// 쿠키의 값은 영문, 숫자만 가능! -> 한글 데이터는 인코딩 진행
		// 한글인코딩 : URLEncoder.encode("인코딩할 값,", "인코딩 방식")
		Cookie cookie = new Cookie("name",URLEncoder.encode("최대열","UTF-8"));
		Cookie cookie2 = new Cookie("age",URLEncoder.encode("20","UTF-8"));
		//2. Cookie의 기한 설정
		//쿠키의 매개변수에 단위는 1초임
		cookie.setMaxAge(60*60);
		//3. 쿠키 전송
		//쿠키는 응답시에 보내므로, response객체 사용
		//매개변수에 생성한 쿠키
		response.addCookie(cookie);
		response.addCookie(cookie2);
		
		
	%>
</body>
</html>

쿠키조회

<%@page import="java.net.URLDecoder"%>
<%@ 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>
	<%
		//4. Cookie 조회
		// 쿠키 조회 시 리턴타입은 배열 -> Cookie객체가 여러개라서
		// 서버가 따로 요청하지 않아도, request객체에 cookie는 담겨서 온다
		// request.getCookies() 메소드 사용해서 쿠키 조회
		Cookie[] cookies = request.getCookies();
		
		for(int i=0; i<cookies.length; i++){
			out.print("쿠키이름 : "+cookies[i].getName()+"<br/>");
			out.print("쿠키값 : "+cookies[i].getValue()+"<br/>");
		}
	%>
	<hr>
	<!-- - 표현식 사용해서 출력
		 - 인코딩이 된 상태이기 때문에 디코딩 해줘야함!
		 - 디코딩(코드->문자):URLDecoder.decode("디코딩할 값","디코딩방식")
		 - for-each문 사용해서 출력
		 for(배열의 데이터타입 변수 : 반복가능한 데이터 ex.배열, List..){
		 반복할 실행문장
		 }
	  -->
	<%for(Cookie c : cookies){ %>
		쿠키이름 : <%= URLDecoder.decode(c.getName(),"UTF-8") %><br>
		쿠키값 : <%= URLDecoder.decode(c.getValue(),"UTF-8") %><br>
	<%} %>
	
	
</body>
</html>

Session

  • 웹서버에있는 데이터영역을 통해서 데이터를 전달하는 방식

웹브라우저가 웹서버에게 요청을 보냄
J SESSION ID:브라우저를 구별하기 위한 임시 키

package Session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Ex03_makeSession
 */
@WebServlet("/Ex03_makeSession")
public class Ex03_makeSession extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.Session객체 생성
		//요청이 들어올때 session 저장소가 만들어지기 때문에 request객체 사용
		HttpSession session = request.getSession();
		
		//2.Session생성
		//session의 값은 Object 타입 -> 모든 객체를 다 담을 수 있음!
		//같은 session이름에 다른 값을 담으면 덮어쓰기가 된다!
		session.setAttribute("이름","최대열");
		session.setAttribute("이름","최대열2");
		
		//3.Session의 유효기간 설정
		//단위 : 초
		//일정 시간동안 요청이 없으면 session을 제거
		session.setMaxInactiveInterval(60*60);
		PrintWriter out = response.getWriter();
		
		response.setContentType("text/html; charset=UTF-8");
		out.print("<h1>Session Making</h1>");
	}
}


showsession

<%@ 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>
<%
	//4.Session 조회
	/* String name = session.getAttribute("이름").toString(); */
	String name = (String)session.getAttribute("이름");
%>
<h1><%=name %></h1>

</body>
</html>

deleteSession

<%@ 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>
<%
	//5.Session삭제
	//5-1. 특정 Session 삭제
	session.removeAttribute("이름");

	//5-2. 전체 Session 종료
	session.invalidate();
%>

<h1>Session 삭제중</h1>
</body>
</html>

쿠키는 보안 어려움
저장형식 텍스트
세션은 보안 강력함
저장형식 오브젝트

쿠키는 아이디 자동완성,오늘하루열지않기,장바구니
세션은 중요한정보관리,네이버메일,네이버카페,네이버블로그

profile
기록과 정리하는것을 계속해서 하려고 노력중이에요 😊

0개의 댓글