학습 목표
- 세션ㅣ 기본 객체와 세셩
- session 속성
- 세션을 사용한 로그인 처리
서버 세션을 이용해 클라이언트의 상태를 저장할 수 있다. 쿠키와의 차이점은 세션은 웹브라우저가 아니라 서버에 값을 저장한다는 것이다. 서버는 세션을 사용해 클라이언트 상태를 유지할 수 있기 때문에, 로그인한 사용자의 정보를 유지하기 떄문에, 로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용한다.
세션 사용하기: session 기본 객체
세션은 웹브라우저와 연관된 서버 영역의 저장공간이다.
'웹 컨테이너'는 기본적으로 한 웹 브라우저 마다 한 세션을 생성한다. 즉, 같은 JSP 페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용하낟.
웹 브라우저별 세션이 존재해, 세션은 웹 브라우저와 연관된 정보를 저장하기에 알맞은 장소이다. 즉, 쿠키가 클라이언트 측의 데이터 보관소라면, 세션은 서버 측 데이터 보관소이다. 쿠키와 마찬가지로 세션도 생성을 해야 정보를 저장할 수 있다 일단, 세션을 생성하면, session기본 객체를 통해 세션을 사용할 수 있다.
또한, 서로 다른 웹 어플리케이션은 세션을 공유하지 않는다.( 다른 서블릿 컨텍스트는 세션을 공유하지 않는다.)
세션 생성하기
<%@ page session ="true" %>
page 디렉티브의 session 속성은 기본값이 true 이므로 session의 속성값을 false 로 지정하지 않으면 세션이 생성된다. session 기본 객체를 통해서 세션을 사용할 수 있다.
한 번, 세션을 생성하면, 이후로는 이미 생성한 세션을 사용한다.
세션은 브라우저별로 세션 ID 를 할당 받아 사용한다. 이 세션ID 를 공유하기 위해 클라이언트와 서버는 쿠키를 이용한다.
즉, JSESSIONID
쿠키가 세션ID 를 공유할 때, 사용하는 쿠키이다.
기본 객체의 속성 사용
- 한 번 생성된 세션은 지정한 유효 시간 동안 유지된다. 따라서 웹 애플리케이션을 실행하는 동안 지속적으로 사용해야하는 데이터의 저장소로 세션이 적당하다.
session.setAttribute("MEMID","Yummy");
session.getAttribute("MEMID");
세션 vs 쿠키
- 세션이 쿠키보다 보안에 앞서다.
- 쿠키는 HTTP 프로토콜인 경우, 누군가 쿠키의 값을 읽을 수 있다. 하지만, 세션의 경우 서버에만 저장되어 중요한 데이터를 저장하기에 알맞은 장소이다.
- 또한, 쿠키 설정 여부에 관계없이 사용가능하다.
- 쿠키가 안되는 경우,url 재작성 방식으로 세션id 을 공유한다.
- 하지만, 세션은 여러 서버에 공유 할 수 없다. 즉, 서브 도메인과 도메인을 공유하지 못한다. 쿠키는 여러 도메인 주소 공유를 할 수 있다.
세션 종료
session.invalidate();
세션 유효 시간
- 최근에 session기본 객체에 접근한 시간을 나타낸다.
- 세션은 마지막 접근 이후, 일정 시간 이내에 다시, 세션에 접근하지 않는 경우, 자동으로 세션을 종료 할 수 있다.
session.getLastAccessedTime() //1
session.setMaxLInactiveInterval(60*60); // 2. 세션 유효시간 지정 -> 음수, 0 으로 지정시, 세션은 유효시간이 없어지고, // 세션 객체가 계속 메모리에 남아 메모리 부족 현상이 발생한다. 따라서, 반드시 세션 유효시간을 ㄷ지정해야한다.
세션을 사용해 로그인 유지
- 로그인에 성공하면, session 기본 객체의 특정 속성에 데이터를 기록한다.
- 이후로 session기본 객체의 특정 속성이 존재하면, 로그인 한 것으로 간주
- 로그아웃할 경우,
session.invalidate()
메소드를 호출해 세션을 종료한다.
'스프링, 자바' 카테고리의 다른 글
자바의 직렬화(Java Serialization) (0) | 2021.01.24 |
---|---|
NIO 기반 입출력 및 네트워킹 (0) | 2021.01.23 |
jsp 와 쿠키 (0) | 2021.01.19 |
jsp 소스 코드의 동작 과정 (0) | 2021.01.19 |
스프링 웹 개발 기초 (0) | 2021.01.19 |