Cookie & Session
반응형
- Session & Cookie은 왜 사용하는가 ?
- Http protocol의 약점을 보완하기 위한 도구들
- http protocol 특징
- 서버는 요청에 대한 처리를 한 후 클라이언트에 응답을 하고 불필요한 지속적 연결로 인한 자원낭비를 줄이기 위해 연결을 해제한다(stateless)
- 그러나 로그인정보같이 클라이언트와 서버가 연결 상태를 유지해야하는 경우가 있는데 이 때 클라이언트 단위로 상태 정보를 유지하기 위해 Cookie와 Session이 사용된다
Cookie란?
- 서버에서 사용자의 컴퓨터에 저장하는 정보파일
- 사용자가 별도의 요청을 하지 않아도 브라우저는 request시 Request Header를 넣어 자동으로 서버에 전송
- key & value 쌍으로 구성되어있다
- 서버에서는 브라우저가 다르면 다른 사용자로 인식하기에 브라우저마다 저장되는 쿠키가 다르다
Cookie의 사용 목적
- 세션관리 : 사용자의 아이디, 접속시간, 장바구니 등 서버가 알아야 할 정보 저장
- 개인화 : 사용자마다 적절한 페이지를 보여줄 수 있다
- 트래킹 : 사용자의 행동과 패턴을 분석하고 기록
Cookie 사용 예
- ID 저장, n일간 다시 보지 않기, 최근 검색한 내용을 바탕으로 광고 추천, 쇼핑몰 장바구니
Cookie의 구성요소 및 특징
- 이름 : 여러 개의 쿠키가 client의 컴퓨터에 저장되므로 각 쿠키를 구별하는데 사용되는 ㅣㅇ름
- 값 : 쿠키의 이름과 매핑되는 값
- 유효기간 : 쿠키의 유효기간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
- 클라이언트에 총 300개의 쿠키를 저장할 수 있다
- 하나의 도메인 당 20개의 쿠키를 가질 수 있다
- 하나의 쿠키는 4KB까지 저장 가능하다
Cookie 동작 순서
Client의 페이지 요청 -> WAS가 쿠키 생성 -> HTTP Header에 쿠키를 넣어 응답 -> 브라우저는 넘겨받은 쿠키를 PC에 저장하고 다시 WAS가 요청할 때 요청과 함께 쿠키를 전송 -> 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우 요청 페이지와 함께 쿠키를 전송(브라우저가 종료되어도 쿠키의 만료기간이 남아 있다면 클라이언트는 계속 보관)
Cookie 사용 메서드
//쿠키 생성
Cookie cookie = new Cookie("name", "value");
//쿠키 값 변경 및 얻기
cookie.setValue("setting value");
String value = cookie.getValue();
// 초단위로 설정
cookie.setMaxAge(60 * 60);
// 유효기간을 0으로 만들어 삭제
cookie.setMaxAge(0);
//생성된 쿠키를 client에 전송
response.addCookie(cookie);
// client에 저장된 cookie 얻기
Cookie cookies[] = request.getCookies();
Session이란 ?
- 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 이를 세션이라 함
- WAS 메모리에 Object의 형태로 저장
- 메모리가 허용하는 용량까지 제한 없이 저장 가능
Session 사용 예
- 사이트 내에서 화면을 이동해도 로그인이 풀리지 않고 유지
- 장바구니 등
Session의 동작 순서
클라이언트가 페이지를 요청 -> 서버는 접근한 클라이언트의 Request-header필드인 쿠키를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인 -> session-id가 존재하지 않는다면 서버는 session-id를 생성해 클라이언트에게 돌려준다 -> 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장(cookie name : JSESSIONID) -> 클라이언트는 재 접속시 이 쿠키(JSESSIONID)를 이용해 session-id값을 서버에 전달
session 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
- 웹 서버에 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나 서버에서 세션을 삭제 했을 때만 삭제되므로 쿠키보다 보안이 우세하다
- 저장 데이터에 제한이 없다
- 각 클라이언트 고유 세션 아이디를 부여한다
- 세션 아이디로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공
- ID나 이름 닉네임과 같이 로그인 했을 때 자주 사용되는 정보를 session에 저장하면 DB를 접근할 필요가 없으므로 효율적이다
HttpSession관련 메서드
// 세션 생성
HttpSession session = request.getSession();
// 값 저장
session.setAttribute("name", objectValue);
// 값 얻기
Object obj = session.getAttribute("name");
// 값 제거(모두 제거, 특정 이름의 속성 제거)
session.invalidate();
session.removeAttribute("name");
Session과 Cookie의 차이
- 가장 큰 차이점은 세션은 서버의 자원을 사용하여 저장하고 쿠키는 서버의 자원을 사용하지 않는다
- 쿠키는 클라이언트 PC에 저장되기에 변질되거나 보안측에서 취약할 수 있다
- 세션은 쿠키를 사용해 session-id만을 저장하므로 비교적 보안이 높다
- 쿠키는 쿠키에 정보가 있기에 서버에서 요청시 속도가 빠르고 세션은 정보가 서버에 있기에 쿠키에 비해 비교적 느린 속도를 가진다
- 이러한 차이점으로 인해 쿠키와 세션을 적절히 활용하여 서버의 자원 낭비를 방지하고 웹 사이트의 속도를 높이는 것을 목표로 한다
Session과 Cookie 정리
SessionCookie
Type | javax.servlet.http.HttpSession(Interface) | javax.servlet.http.Cookie(Class) |
저장 위치 | 서버의 메모리에 Object로 저장 | 클라이언트 PC에 file로 저장 |
저장형식 | Object | String |
사용 예시 | 로그인 시 사용자 정보, 장바구니 등 | 아이디저장, n일 그만 보기 |
용량제한 | x | 도메인당 20개, 쿠키당 4KB |
만료시점 | 알 수 없음(Client가 로그아웃 하거나, 이정 시간동안 session에 접근 하지 않을 경우[만료 시간은 web.xml에 설정]) | 쿠키 저장 시 설정(미설정시 브라우저 종료시 만료) |
공통 | 전역에 저장하기에 프로젝트 내의 모든 JSP에서 사용가능 | |
Map형식으로 관리하기 때문에 key값의 중복을 허용하지 않음 |
반응형
'📚CS > 📡컴퓨터 네트워크' 카테고리의 다른 글
컴퓨터 네트워크 #2(네트워크의 기본 규칙) (0) | 2022.01.04 |
---|---|
컴퓨터 네트워크 #1(네트워크 기본지식) (0) | 2022.01.04 |