세션(session)


서버 세션을 사용하면 클라이언트의 상태를 저장할 수 있다.
쿠키와의 차이점은 세션은 웹 브라우저가 아니라 서버에 값을 저장한다는 점이다.
서버는 세션을 사용해서 클라이언트 상태를 유지할 수 있기 때문에, 로그인한 사용자 정보를 유지하기 위한
목적으로 세션을 사용한다.

1. 세션 사용하기 : session 기본 객체

웹 브라우저에 정보를 보관할 때 쿠키를 사용한다면, 세션은 웹 컨테이너에 정보를 보관할 때 사용한다.
세션은 오직 서버에만 생성된다.

스크린샷 2020-02-06 오후 6 42 13

웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다.
즉, 같은 JSP 페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용한다.

웹 브라우저마다 세션이 따로 존재하기 때문에, 세션은 웹 브라우저와 관련된 정보를 저장하기에 알맞은 저장소이다.
즉, 쿠키가 클라이언트 측의 데이터 보관소라면 세션은 서버 측의 데이터 보관소인 것이다.

만료 시간을 정할 수 있지만 메모리에 저장하기 때문에 브라우저가 종료되면 사라지게 된다.

2. 세션 생성, 속성 사용, 종료 등

세션 사용 방법은 책 참고!

3. 세션을 사용한 로그인 상태 유지

세션을 사용해서 로그인을 처리하는 방식은 쿠키를 사용한 방식과 비슷하다.
(1) 로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.
(2) 이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.
(3) 로그아웃할 경우 session.invalidate() 메소드를 호출하여 세션을 종료한다.

4. 서블릿 컨텍스트와 세션

예제로 설명!
webapp 폴더에 chap10 폴더와 chap10_2 폴더를 만들면
다음 두 URL을 사용해서 view.jsp를 실행할 수 있다.

JSESSIONID 쿠키를 서버에 전송한다고 했을 때,

같은 서버에서 /chap10 경로와 /chap10_2 경로가 서로 다른 JSESSIONID 값을 사용하는 이유는
두 경로가 서로 다른 웹 어플리케이션이기 때문이다.
세션 ID를 보관할 때 사용할 JSESSIONID 쿠키의 경로로 웹 어플리케이션의 컨텍스트 경로를 사용한다.
즉, 웹 어플리케이션의 컨텍스트 경로가 /chap10인 쿠키는 URL이 /chap10 경로로 시작하는 경우에만 전송되므로,
/chap10 웹 어플리케이션에서 생성한 JSESSIONID 쿠키는 /chap10 웹 어플리케이션에서만 사용한다.
/chap10_2도 마찬가지이다.

서로 다른 두 웹 어플리케이션이 다른 세션 ID를 사용하고 다른 JSESSIONID 쿠키를 사용한다는 것은,
다시 말하면 서로 다른 웹 어플리케이션이 세션을 공유하지 않음을 의미한다.
즉, 같은 웹 브라우저라 하더라도 /chap10 어플리케이션에서 사용하는 session 기본 객체와
/chap10_2 어플리케이션에서 사용하는 session 기본 객체가 다르다.

5. server-side 관점의 세션

6. client-side 관점의 세션

보장되어야 하는 것