CookieSession

최현주·2023년 11월 1일
1

Cookie & Session
client의 정보를 지속적으로 유지하기위한 방법이다
쿠키는 클라이언트(브라우저)인 개인의 검색기록(키와 값)을 저장하는 데이터파일이다.
전달할 데이터를 Web Browser(Client)로 보냈다가 Web Server로 되돌려받는 방법이다
Web페이지 방문 시 브라우저에서의 정보들이 저장된 파일이다.
쿠키디스크의 특징은 4kb이하로 제한하고, 300개 데이터 정보를 배열한다
즉, 최대 쿠키 용량은 4kb X 300개 = 1.2MB이다.
세션은 서버(네이버, 다음, 구글 등)가 검색기록을 저장하는것이기때문에 비용이 든다
네이버는 쿠키를 사용한다.


쿠키 생성 및 동작과정은 클라이언트가 Request를 통해 요청을하고 ㅡ>쿠키를 HTTP Response Header(Set-Cookie)에 담아서 응답한다.ㅡ> 쿠키를 클라이언트의 하드디스크에 저장하고 ㅡ>
클라이언트가 다시 요청(Request)할 때 쿠키를 포함해서 요청한 후 응답(쿠키 업데이트 시 다시 쿠키 전달)한다

쿠키 기한 지정하기
cookie.setMaxAge(60*60);

쿠키를 전송하기 전에 기한을 지정한다.
쿠키의 기한은 초단위로 지정한다.
ex)1시간 = 60초*60초

쿠키 동작 방식
클라이언트가 페이지를 요청하면 ㅡ> 상태를 유지하고싶은 값을 쿠키로 생성한다 ㅡ> http헤더에 쿠키를 포함시켜 응답한다 ㅡ>브라우저가 종료되어도 쿠키만료기간이 있다면 클라이언트에서 보관한다 ㅡ> 같은 요청을 할 경우 http헤더에 쿠키를 함께 보낸다 ㅡ> 서버에서 쿠키를 읽어 이전상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 http헤더에 포함시켜 응답한다.

쿠키의 장단점
장점 : 민감하지않은 정보를 담기 좋다 쇼핑몰 장바구니를 담을때, 다시보지않기 클릭할 때
단점 : 보안에 취약, 작은 허용용량, 브라우저를 변경할 경우 다르 ㄴ브라우저에서 저장한 쿠키값을 사용할 수 없음

쿠키 객체 생성

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

쿠키 객체 : javax.servlet.http.Cookie
쿠키 이름 : String
쿠키 값 : String, 영어만 가능(한글 보낼 시 인코딩 진행(URLEncoder.encode("name","UTF-8);

makeCookie

<%@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> 저장위치 : ClientPC </li>
	<li> 보안 : 취약 </li>
	<li> 자원 : Client의 자원을 사용해서 Server에 영향X </li>
	<li> 용량 : 쿠키 1개당 4KB X 300개 = 1.2MB </li>
	<li> 저장형식 : 택스트만 저장 가능, 영어만 가능(한글은 인코딩 필요) </li>
</ol>

<% 
	// 1. 쿠키 객체 생성
	// new Cookie("쿠키이름", "쿠키값")
	// 한글이라면 한글인코딩 -> URLEncoder객체 사용
	Cookie cookie = new Cookie("name", URLEncoder.encode("최현주", "UTF-8"));
	
	// 2. 쿠키의 기한 설정
	// 양수 : 초 단위로 해당 기한만큼 쿠키를 유지
	// 음수 : 브라우저 종료 시 쿠키가 제거
	// 0 : 제거
	cookie.setMaxAge(3600);
	
	// 3. 쿠키 전송
	// 쿠키는 응답할 때 clientPC로 전송 -> response객체 사용
	response.addCookie(cookie);
	
	
%>




</body>
</html>

Session(세션)

브라우저가 종료되기전까지 클라이언트의 정보를 유지하게 해주는 기술이다
사용자의 정보파일을 서버측에서 관리한다
쿠키보다는 세션이 조금 더 보안에 강력하다

새션 동작 방식

1. 클라이언트가 페이지를 요청한후 ㅡ> 2.해당 브라우저(클라이언트에 유일한 ID(Session ID)를 부여한다.ㅡ> 3. 응답헤더에 Session Id를 포함해서 전송한 후 ㅡ> 4. 쿠키에 SessionId를 저장한다ㅡ>이후 서버에 요청 할 때 Session Id가 담긴 쿠키를 요청헤더에 추가하여 요청
ㅡ> 6. Session Id를 확인하고 해당 세션에 관련된 정보를 확인한 후 응답한다.
세션의 특징
1. 각 클라이언트에게 고유 id를 부여한다.
2. 보안면에서 쿠키보다 우수하다
3. 사용자가 많아질수록 서버 메모리를 많이 차지하게된다.
세션 사용 예
로그인같이 보안상 중요한 작업을 수행할 때 사용한다
쿠키와 세션의 차이

상대적으로 안전할 뿐 세션도 엄청 안전하지는 않다

Scope

변수가 유효성을 갖는 영역
JSP페이지에서 사용되는 객체들은 JSP내장 객체이든 페이지 내에서 만들어졌던간에 모두 정해진 영역안에서만 사용이 가능하다
Page scope는 실제 선언된 JSP 페이지 내에서만 사용가능하다
pageContext내장객체로 사용 가능하다
저장된 값은 저장한 페이지 내에서 지역변수로 사용한다

값 저장방법
pageContext.setAttribute(네임값(String),실제값(Object))
pageContext.getAttribute(네임값(String))
주 사용 용도는 pageScope에 값을 저장한 후 EL표기법 사용, 해당 JSP나 Servlet이 실행되는 동안에만 정보 유지하고자 할 때 사용한다.

Request scope
클라이언트로부터 요청을 받고 응답할 때까지 사용이 가능하다
HttpServletRequest객체로 사용가능하다
service()메소드가 끝날때 객체가 없어진다

값 저장방법
request.setAttribute(네임값(String),실제값(Object))
request.getAttribute(네임값(String))
주 사용용도는 클라이언트의 요청을 다룰때사용하고 forwar로 데이터 넘겨서 유지하고자할 때 사용한다.

Session scope는 세션이 유지되는 동안 사용이 가능하다
HttpSession객체로 사용이 가능하다
웹 브라우저별 (Chrome, Safari등) 변수를 관리하는 영역이다

값 저장 방법
session.setAttribute(네임값(String),실제값(Object))
session.getAttribute(네임값(String))
주사용용도
주로 로그인 시 사용자 정보를 저장하고 싶을때 사용한다

Application scope
웹 어플리케이션이 시작되고 종료될때까지 사용이 가능하다
ServletContext객체로 사용이 가능하다
웹 어플리케이션 당 한개의 객체를 사용한다

application.setAttibute(네임값(String),실제값(Object))
application.getAttribute(네임값(String)
주 사용용도
모든 클라이언트들이 공통적으로 사용하는 값을 저장한다

profile
갓벽한 개발자

0개의 댓글