[SPRING]세션(Session)
카테고리: SPRING
[12] 세션Permalink
12.1. 세션 소개Permalink
- 서로 관련된 요청(request)들을 하나로 묶은 것 - 쿠키를 이용
- browser마다 개별 저장소(session 객체)를 서버에서 제공(1:1)
(a collection of related HTTP transactions made by one browser to one server)- 쿠키: 브라우저에 저장
- 세션: 서버에 저장
- browser마다 개별 저장소(session 객체)를 서버에서 제공(1:1)
- 쿠키는 정보를 클라이언트에 저장한 후 네트워크로 주고받기 때문에 민감한 정보를 다루기엔 위험함.
- 세션은 서버가 직접 관리하므로 민감한 정보를 다루기에 더 적합함.
- 로그인 정보 유지
- 클라이언트가 ⓵ 웹 브라우저 통해 서버에 접속한 후 ⓶ 용무를 처리하고 ⓷ 웹 브라우저를 닫아 서버와의 접속 종료하는 하나의 단위를 세션이라함.
- 세션은 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적임.
- 로그인 ~ 로그아웃까지가 하나의 세션이라고 생각하면 됨.
- 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유됨.
- 포워드나 페이지 이동 시에도 세션 영역은 소멸되지 않음.
- 세션은 브라우저마다 저장됨
- 같은 PC라도 다른 브라우저라면 다른 세션ID를 저장함.
12.2. 세션 설정, 확인, 삭제Permalink
- 유지 시간 설정
- 세션은 웹브라우저를 실행할 때마다 새롭게 생성됨.
- 생성된 세션은 설정된 유지 시간동안 유지됨
- 유지 시간이 만료되기 전에 새로운 요청이 들어오면 수명이 계속 연장됨.
-
만료 때까지 클라이언트가 아무런 요청을 하지 않거나 웹브라우저를 닫으면 삭제됨.
- 방법 2가지
- web.xml에서 설정
- 분 단위로 설정함
- session.setMaxInactiveInterval()
- 초 단위로 설정함
- web.xml에서 설정
- 설정값 확인
- JSESSIONID
- 우리가 생성한 적 없음
- 톰켓 컨테이너에서 새로운 웹 브라우저가 접속하면 세션을 유지하지 위해 자동으로 생성해줌.
- 이 JSESSIONID는 요청을 보낸 웹 브라우저가 현재 연결되어 있는지(세션이 살아있는지) 확인하는 데 이용됨.
- JSESSIONID
- 세션 삭제
- 웹 브라우저를 닫으면 종료됨.
- 웹브라우저 설정에서 모든 쿠키 삭제해 세션을 삭제하는 방법도 있음.
12.3. 동작 방식Permalink
- 웹 브라우저가 처음 접속하면 서버(톰켓)는 세션을 새로 생성함. 응답 시 세션 아이디를 값으로 갖는 JSESSIONID 쿠키를 응답 헤더(response header)에 담아 웹 브라우저에 보냄.
- 웹 브라우저는 재요청 시마다 JSESSIONID를 요청 헤더(request header)에 추가하여 보냄.
- 서버는 요청 헤더에 포함된 JSESSIONID로 해당 요청이 기존 세션에서 이어진 것임을 알게 됨.
12.4. 세션Permalink
- 같은 세션ID를 사용한다는 것은 같은 세션저장소(세션 객체)를 사용할수 있는 것임.
- 처리과정
- 클라이언트가 요청을 하면 서버가 세션ID(JSESSIONID)를 쿠키에 담아서 응답함
- 브라우저로 요청하면 서버는 세션(저장소)을 무조건 생성함.
- 세션 객체마다 갖고 있는 것은 세션ID임.
- 그 다음 요청부터는 앞서 응답된 쿠키가 자동으로 따라감
- 두번째 요청부터 같은 세션임. 쿠키로 서버에 계속 같이 전송됨.
- 요청에 세션이 꼬리표로 붙어서 가는 것임(구별이 됨)
- 원래 각 요청이 독립적임.(서로 관련이 없다는 의미)
- 여기에 쿠키를 이용해서 세션ID를 발급해서 이 요청들에 공통점이 있게됨. (그룹화)
- 클라이언트가 요청을 하면 서버가 세션ID(JSESSIONID)를 쿠키에 담아서 응답함
- 프로그램에서 세션 객체를 사용할수 있음.
- 세션 끝내는 방법
- 수동종료
- invalidate()
- 세션 객체 제거 (즉시 종료)
- 로그아웃
- invalidate()
- 자동종료
- timeout
- 요청과 요청 사이의 시간이 30분이 넘으면 클라이언트 요청시 서버는 새로운 세션Id를 응답헤더에 담아 응답함.
- 새로운 새션Id가 발급된다는 것은 새로운 세션 객체가 만들어짐을 뜻함.
- 기존 세션 객체는 삭제됨.
- timeout 동안은 서버에 세션 객체가 남아있어야 하므로 서버 부담이 큼.
- 세션 객체는 삭제처리 된다 하더라도 서버에 오랫동안 남아있을수도 있음.
- timeout
- 세션이 끝나고나면 새로운 세션ID가 발급됨.
- 그 다음부터는 새로운 세션이 시작됨.
- 수동종료
- 세션 객체 얻기
- request.getSession();
- javax.servlet.http.HttpSession 타입
- HTTP session을 구현한 객체. 세션 정보 저장에 사용
- request.getSession();
- 세션 객체에 데이터 저장
- session.setAttribute(“id”, “name”);
- 세션 ID를 반환
- String geiId()
- 세션 내에서 최근 요청을 받은 시간 반환
- long getLastAccessedTime()
- 새로 생성된 세션인지를 반환
- boolean isNew()
- request.getSession() 호출 후 사용
- boolean isNew()
- 지정된 시간(초)후에 세션을 종료 (예약 종료)
- void setMaxInactiveInterval(int interval)
- 예약된 세션 종료 시간 반환
- int getMaxInactiveInterval()
- 세션 끝내는 방법
12.5. 쿠키 vs 세션Permalink
쿠키(Cookie) | 세션(HttpSession) |
---|---|
브라우저 저장 | 서버에 저장 |
서버 부담 X | 서버 부담 O |
보안에 불리 | 보안에 유리 |
서버다중화에 유리 | 서버 다중화에 불리 |
댓글 남기기