March
22nd,
2021
앞서 쿠키에 대해 알아보았는데, 쿠키의 단짝은 세션이다. 마침 책의 다음 챕터도 세션에 대해 알려주고 있어, 해당 부분에 대해 이어서 알아보기로 하였다.
세션이란 ?
세션은 웹 컨테이너(서버)에서 사용자 정보 파일을 브라우저에 저장하는 것을 말한다. 도메인을 설정하지 않은 쿠키와 달리, 여러 페이지를 방문하여도 하나의 세션을 사용한다. 즉, 웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다. 세션의 동작 방식은 아래와 같다.
- 클라이언트가 서버에 접속시 세션ID를 발급받는다.
- 클라이언트는 세션ID를 쿠키에 저장하여 갖고있는다.
- 그 이후 클라이언트는 서버에 요청할 때, 쿠키의 세션ID를 서버에 전달한다.
- 서버는 세션ID를 전달받아 별다른 작업 없이 세션ID에 있는 클라이언트 정보를 가져온다.
- 클라이언트 정보를 가지고 서버 요청을 처리해 응답한다.
세션의 특징
- 이름 : 각각의 쿠키 구별시 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로: 쿠키를 전송할 요청경로
이름과 값은 콤마, 세미콜론, 공백, 등호기호를 제외한 출력가능한 아스키 문자로 구성된다. 쿠키 유효시간의 경우, 별도로 지정하지 않으면 웹 브라우저를 종료할 때 쿠키를 함꼐 삭제한다.
세션 관련 사용법
세션 생성
- page 디렉티브의 session 속성을 “true”로 지정하기
<%@ page session = "true" %>
page 디렉티브의 session 속성 기본 값은 true기 때문에, false로 지정하지만 않으면 자동으로 세션이 생성된다. 이렇게 생성되면 session 기본 객체를 통해 사용할 수 있다.
- request.getSession()을 통한 세션 생성 HttpSession을 생성하는 방법이다. 현재 세션 객체를 리턴하여 세션 값 등등..을 가져올 수 있다.
HttpSession httpSession = request.getSession();
세션 객체
세션 객체는 request와 비슷한 속성을 제공한다.
기본 메소드 :
- getId(): 세션의 고유 ID를 리턴한다.
- getCreationTime() : 세션이 생성된 시간을 구한다.
- getLastAccessedTime() : 웹 브라우저가 마지막으로 세션에 접근한 시간을 구한다.
- setAttribute(String key, String value) : 세션에 key와 속성 값을 저장한다.
- 여러 값을 set해야 할 경우, 해당 메소드를 계속 호출하기 보다는, 저장해야 할 값들을 클래스정보에 넣어 관리하는 것이 더 좋다.
- getAttribute(String key) : 세션에 key 의 속성 값을 가져온다.
- invalidate() : 세션 종료, session 기본 객체를 삭제하고, 이 객체에 저장했던 속성 목록도 함께 삭제한다.
그렇다면 쿠키와 세션의 차이는?
- 쿠키는 웹브라우저(클라이언트)에 저장되며 서버의 자원을 전혀 사용하지 않지만, 세션은 서버측에서 관리되는 데이터이다.
- 보안적으로 세션이 훨씬 더 우수하다.
- 쿠키는 물리적으로 클라이언트의 메모리 혹은 파일에 저장되지만, 세션은 물리적으로 저장되지 않는다.
- 속도 측면으로는 쿠키가 훨씬 더 빠르다(서버측의 처리가 필요하지 않기 때문에)
- 쿠키는 클라이언트에 저장되기 때문에 변질되거나 request시 스니핑을 당할 우려가 있어 보안에 취약하지만, 세션은 쿠키를 이용해 sessionid만 저장하고 이걸 통해서 서버에 데이터를 가져오기 때문에 비교적 보안성이 좋다.
- 특정 브라우저가 쿠키를 지원하지 않을 경우 세션을 이용해서만 클라<->서버 연결유지가 가능하다.
쿠키와 서버의 사용처
- 쿠키 : 로그인 상태 유지, 몇일간 팝업 보지 않기, ID/PW정보 저장
- 세션 : 서버단에서 사용자가 전역적으로 다뤄줘야 하는 정보
세션쿠키와 세션ID의 차이?
- 세션쿠키는 브라우저를 닫으면 삭제되는 쿠키를 말한다.(이와 반대되는 개념은 지속쿠키가 있다)
- 세션ID는 서에서 사용자를 식별하기 위한 값이다. 이 ID를 쿠키로 전달받아 세션에서 내부적인 데이터 처리가 가능하게 된다.
참고 자료 :