안녕하세요 이번 글에서는 session의 역할들을 알아보겠습니다.
1. 클라이언트와 컨테이너의 session 공유 방법
컨테이너는 클라이언트에게 요청에 대한 응답을 보낼 때 reponse 객체에 세션 ID를 보냅니다. 그러면 클라이언트는 이 세션 ID를 가지고 있다가. 다음 요청을 보낼 때 같은 세션 ID를 서버로 보내고 서버는 이것을 확인하여 같은 세션에서 온 요청임을 확인할 수 있습니다.
세션 ID의 교환 방식은 두 가지가 있는데 첫 번째 방법은 Cookie에 세션 ID를 넣어서 보내는 방법입니다.
- Cookie
위 그림처럼 request와 response의 헤더 값으로 세션 ID를 담아서 공유합니다.
하지만 클라이언트가 브라우저에서 쿠키를 사용하지 않는다고 설정을 했다면 서버와 클라이언트는 세션 ID를 어떻게 공유해야 할까요?
그럴 때 사용되는 두 번째 방법이 있습니다.
- URL 재작성
컨테이너는 클라이언트에게 최초 세션 ID를 보낼 시 쿠키에 세션 ID를 담아서 보내는 방법과 URL 뒤에 세션 ID를 더해서 보내는 두 가지 방법을 모두 사용합니다. 그런 다음 클라이언트의 요청에서 쿠키의 세션 ID를 찾이 못하였을 때 URL세션 ID를 사용합니다.
위 그림처럼 세션 ID을 URL에 더하여 사용합니다.
기본적으로 세션 ID는 컨테이너에서 관리하여 개발자가 만들거나 없애는 과정을 굳이 하지 않아도 됩니다.
2. session 생성 유무 확인 및 TimeOut설정
세션 값이 새로 생긴 시점이나 소멸된 시점을 구분하여 보겠습니다.
//요청받은 세션값을 확인하거나 세션값을 새로생성할때 아래와 같이 코딩하여 줍니다.
HttpSession session = request.getSession();
//클아이언트가 세션ID로 응답하지 않았다면 즉 새로생된된 세션이라면 true를 반환합니다.
if(session.isNew()) {
System.out.println("New Session ID!!");
}else {
System.out.println("Welcome back!!!");
}
//false를 넣어주게 되면 존재하는 세션을 넘겨주라는 의미이며 없을시 null을 반환 합니다.
HttpSession session = request.getSession(false);
//세션의 속성을 소멸시켜 줍니다.
session.invalidate();
if(request.getSession(false) == null) {
System.out.println("No Session");
}else {
System.out.println("Welcome back!!!");
}
다음은 session의 TimeOut을 설정하여 보겠습니다.
<!-- session timeout 서정 방법 -->
<session-config>
<!--안에 들어가는 숫자는 분 단위를 나타냅니다. -->
<session-timeout>15</session-timeout>
</session-config>
위처럼 web.xml에 직접 timeout을 지정할 수 있습니다.
HttpSession session = request.getSession();
//해당 세션객체를 호출한 세션만 따로 TIMEOUT을 지정 할 수 있습니다 (매개변수로 들어간 값은 초 단위를 뜻합니다. 20*60 = 20분)
session.setMaxInactiveInterval(20*60);
서블릿에서 직접 timeout 을 지정할 수도 있습니다.
감사합니다!!
'Servlet & Jsp' 카테고리의 다른 글
[ JSP 표현식 언어(EL) 사용하기 ] - Head Frist Servlet & Jsp (0) | 2020.12.26 |
---|---|
[JSP 에서 자바코드사용(스크립틀릿)] - Head Frist Servlet & Jsp (0) | 2020.12.25 |
[servletContext & HttpSession & Request] - Head Frist Servlet & Jsp (0) | 2020.12.23 |
[sendRedirect 사용하기] - Head Frist Servlet & Jsp (0) | 2020.12.21 |
[sendRedirect 사용하기] - Head Frist Servlet & Jsp (0) | 2020.12.21 |