본문 바로가기
CS 스터디

세션과 쿠키

by 새싹감자 2022. 9. 20.

Session Tracking은 http의 단점을 보완하기 위해서 생겨났다.

 

Http


  • Connectless : 연결 유지x
    • request 보내고 response를 받으면 연결 해제(유한한 네트워크 자원의 효율적 사용)
  • Stateless : 상태 정보 유지x
    • 기본 request에서 무엇을 했는지 알 수 없음

 

http의 이러한 특징때문에 보완책이 필요하다.

 

Session Tracking


Session Traking은 일정시간동안 동일한 사용자로부터 들어오는 여러 요청들을 하나의 상태로 처리할 수 있도록 만들어주는 기술이다.

Session Tracking에는 Cookie와 Session이 있다.

 

Cookie


  쿠키는 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 파일 또는 메모리에 저장하는 작은 기록 정보 파일이다. 쿠키는 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다. 쿠키는 Client측에 저장된다.

 

  쿠키의 단점은 크기 제한이 있다는 것이다. 쿠키는 클라이언트에 300개까지 저장이 가능하며, 하나의 도메인당 20개의 값만 가질 수 있다. 하나의 쿠키값은 4KB까지 저장한다.

 

  Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.

쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다.

 

 쿠키는 보안에 취약하기 때문에 중요한 정보는 담지 않고, 사용자가 변경시킬 수 있다.

 

Cookie 생성하기

 

Cookie c = new Cookie(name, value);
c.setMaxAge(쿠키만료시간);
response.addCookie(c);//respose에 쿠키가 세팅된다.

 

Cookie  조회하기

 

Cookie[] c = request.getCookie();

 

Cookie 삭제하기

 

c.setMaxAge(0);
response.addcookie(e);​

 

활용
String idsaver = request.getParameter("saveid");
if("ok".equals(idsaver)) { //아이디 저장을 체크했으면
	Cookie cookie = new Cookie("ssafy_id",userId);
	cookie.setPath(request.getContextPath());
	cookie.setMaxAge(60*60*24*356*40); //40년간 저장
	response.addCookie(cookie);
	}else { //아이디 저장을 해제한 경우
	//요청에서 쿠키 받기
	Cookie cookies[]=request.getCookies();
	if(cookies!=null) {
			for(Cookie cookie: cookies) {
					if("ssafy_id".equals(cookie.getName())) {
								//쿠키 삭제를 위해 쿠키의 expire 0으로 셋팅
					cookie.setMaxAge(0);
								//응답 내보낼 때 유효기간 0인 쿠키 보내서 알려주기
								//-->확인하고 브라우저가 삭제함
					response.addCookie(cookie);
					break;
							}
						}
					}
				}

Session


 

  세션은 쿠키의 트래픽 문제와 쿠키를 변경하는 보안적 이슈를 해결하기 위해 등장하였다. 

쿠키가 웹 브라우저(클라이언트)쪽에 상태를 유지하기 위한 정보를 저장했다면, 세션은 웹 서버쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다. memory가 허용하는 용량까지 제한 없이 저장이 가능하다.

 

   세션은 메모리에 저장하기 때문에 브라우저가 종료되면 사라지게 된다.

Session 생성하기

 

HttpSession session = request.getSession();
HttpSession session = request.getSession(false);

 

Session 저장하기

 

session.setAttribute(String name, Object value);

 

Session  얻기

 

Object obj = session.getAttribute(String name);

 

Session 제거

 

session.removeAttribute(String name);
session.invalidate();

 

Session과 Cookie의 다른점


Session과 Cookie의 가장 큰 차이점은 사용자의 정보가 저장되는 위치이다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용합니다.

 

'CS 스터디' 카테고리의 다른 글

데이터 모델링  (0) 2022.09.27
MVC 디자인 패턴  (0) 2022.09.20
프로세스, 스레드  (1) 2022.09.16
Queue를 활용해서 Stack을 만들기  (0) 2022.09.15
Stack을 활용해서 Queue만들기  (0) 2022.09.15

댓글