본문 바로가기
back-end/sevlet+ jsp+MVC

HttpSession/Cookie

by 모두의 향연 2022. 4. 9.
728x90
반응형

Session & Cookie

http protocol의 특징

  • client가 server에 요청(request)
  • server는 요청에 대한 처리를 한 후 client에 응답(response)
  • HTTP protocol의 특징(약점)을 보완하기 위해 사용
  • 응답 후 연결을 해제 → stateless
요청이든 응답이든 응답 후에는 무조건 끊어버린다. 그러다 보니 로그인을 한 상태에서 다른 페이지로 넘어가게 되면 로그인이 끊기는 상황이 발생한다. 그래서 쿠키와 세션이 사용되는 것이다.

- 지속적인 연결로 인한 자원낭비를 줄이기 위해 연결을 해제한다
- 그러나 client와 server가 연결 상태를 유지해야 하는 경우 문제가 발생(로그인 정보 등)
- 즉 client단위로 상태 정보를 유지해야 하는 경우 Cookie와 Session이 사용된다

 


1. session이란? 

  • session? : javax.servlet.http.HttpSession
  • 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 함
  • WAS의 memory에 Object의 형태로 저장
  • memory가 허용하는 용량까지 제한 없이 저장 가능(서버에 저장되는 거니까)
  • 인터페이스임

 

2. session의 사용 예

  • 로그인: 사이트에서 화면이동해도 로그인이 풀리지 않고 유지
  • 장바구니

 

3. session의 동작 순서

  • 클라이언트가 페이지를 요청
  • 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
  • session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다
  • 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장[쿠키 이름 : JSESSIONID]
  • 클라이언트는 재 접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id 값을 서버에 전달

 

4. session의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
  • 웹 서버에 저장되는 쿠키(=세션 쿠키)
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다
  • 저장 데이터에 제한이 없다
  • 각 클라이언트 고유 Session ID를 부여한다
  • Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공

 

5. session의 설정

  • Browser당 하나의 JSESSIONID를 할당 받음
  • 아이디 또는 닉네임과 같이 로그인을 했을 경우 자주 사용되는 정보를 session에 저장하면 DB를 접근할 필요가 없으므로 효율 적이다

 

6. HttpSession의 주요 기능

기능 method
생성 HttpSession session = request.getSession(); → ( )면 true랑 똑같다. 세션이 있으면 그것을 리턴해주고, 없으면 새로운걸 만들어서 리턴해줌
HttpSession session = request.getSession(false);  → 있으면 있는걸 리턴해주고 없으면 null을 리턴 
값 저장 session.setAttribute(String name, Object value);
값 얻기 session.getAttribute(String name);
값 제거 session.removeAttribute(String name); //특정 name의 속성만 제거됨
session.invalidate(); //연결되어 있는 모든 속성 제거
생성시간 long ct = session.getCreationTime();
마지막 접근 시간 long lat = session.getLastAccessedTime();

 


1. Cookie란?

  • javax.servlet.http.Cookie
  • 서버에서 사용자의 컴퓨터에 저장하는 정보파일
  • 사용자가 별도의 요청을 하지 않아도 브라우저는 request시 Request Header를 넣어 자동으로 서버에 전송(헤더에 이름과 값&만료기간 등을 저장하고, 서버는 헤더를 분석하여 판단함)
  • key와 value로 구성되고 String 형태로 이루어져 있음(text파일이라서 문자열 형태임)
  • Browser마다 저장되는 쿠키는 다름(서버에서는 Browser가 다르면 다른 사용자로 인식)
  • 클래스임

 

2. Cookie의 사용 목적

  • 세션 관리 : 사용자 아이디, 접속 시간, 장바구니 등의 서버가 알아야 할 정보 저장
  • 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다
  • 트래킹 : 사용자의 행동과 패턴을 분석하고 기록 

 

3. Cookie의 사용 예(컴퓨터를 옮기면 없어질 것들)

  • ID 저장 (자동 로그인)
  • 일주일간 다시 보지 않기
  • 최근 검색한 상품들을 광고에 추천
  • 쇼핑몰 장바구니 기능

 

4. Cookie의 구성요소

  • 이름 : 여러 개의 쿠키가 client의 컴퓨터에 저장되므로 각 쿠키를 구별하는 데 사용되는 이름
  • 값 : 쿠키의 이름과 매핑되는 값
  • 유효기간(setMaxAge(int expiry)) : 쿠키의 유효기간(초단위) ex)20년=60*60*24*365*20
  • 도메인(setDomain(String domain)) : 쿠키를 전송할 도메인
  • 경로(setPath(String url)) : 쿠키를 전송할 요청 경로

 

5. Cookie의 동작 순서

  • Client가 페이지를 요청
  • WAS는 Cookie를 생성
  • HTTP Header에 Cookie를 넣어 응답
  • Browser는 넘겨받은 Cookie를 PC에 저장하고, 다시 WAS가 요청할 때 요청과 함께 Cookie를 전송
  • Browser가 종료되어도 Cookie의 만료 기간이 남아 있다면 Client는 계속 보관
  • 동일 사이트 재방문 시 Client의 PC에 해당 Cookie가 있는 경우, 요청 페이지와 함께 Cookie를 전송.

 

 

6. Cookie의 특징

  • 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있다
  • 클라이언트에 총 300개의 쿠키를 저장할 수 있다
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있다
  • 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다

 

 

7. Cookie의 주요 기능

기능 method
생성 Cookie cookie = new Cookie(String name, String value);
값 변경/얻기 cookie.setValue(String value); / String value = cookie.getValue();
사용 도메인지정/얻기 cookie.setDomain(String domain); / String domain = cookie.getDomain();
값 범위지정/얻기 cookie.setPath(String path); / String path = cookie.getPath();
cookie의 유효기간지정/얻기 cookie.setMaxAge(int expiry); / int expiry = cookie.getMaxAge(); cookie 삭제 : cookie.setMaxAge(0);
생성된 cookie를 client에 전송 response.addCookie(cookie);
client에 저장된 cookie 얻기 Cookie cookies[] = request.getCookies();

 


[ Session & Cookie 정리 ]

  Session Cookie
Type javax.servlet.http.HttpSession (Interface) javax.servlet.http.Cookie (Class)
저장 위치 Server의 memory에 Object로 저장 Client 컴퓨터에 file로 저장
저장 형식 Object는 모두 가능(일반적으로 Dto, List등 저장) file에 저장되기 때문에 String형태
사용 예 - 로그인 시 사용자 정보
- 장바구니 등
- 최근 본 상품 목록, 아이디저장(자동로그인)
- 팝업메뉴에서 ‘오늘은 그만 열기’등
용량제한 제한 없음 도메인당 20개, 1쿠키당 4KB
만료시점 알 수 없음(Client가 로그아웃 하거나 일정 시간동안 session에 접근 하지 않을 경우 [만료 시간은 web.xml에 설정함]) 쿠키 저장 시 설정(설정이 없을 경우 Browser 종료 시 만료)
공통 - 전역에 저장하기 때문에 project내의 모든 JSP에서 사용가능
- Map형식으로 관리하기 때문에 key값의 중복을 허용하지 않는다

 

728x90
반응형

'back-end > sevlet+ jsp+MVC' 카테고리의 다른 글

JSTL (JSP Standard Tag Library)  (0) 2022.04.10
EL(Expression Language)  (0) 2022.04.10
servlet  (0) 2022.04.07
JSP(Java Server Page)  (1) 2022.04.04