본문 바로가기

6개월 대장정/JSP 개념

53일차 - [JSP] session

반응형

안녕하세요. pitang입니다.

JSP의 session객체에 대해 알아보겠습니다.

 

session(세션)

웹 브라우저에 정보를 보관할 때 쿠키를 사용한다면, 세션은 웹 컨테이너에 정보를 보관할 때 사용한다.

세션은 오직 서버에만 생성되고 웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다.

즉, 같은 JSP 페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용한다.

 

웹 브라우저마다 세션이 따로 존재하기 때문에, 세션은 웹 브라우저와 관련된 정보를 저장하기에 알맞은 장소이다.

즉, 쿠키가 클라이언트 측의 데이터 보관소라면 세션은 서버 측의 데이터 보관소인 것이다.

쿠키와 마찬가지로 세션도 생성을 해야만 정보를 저장할 수 있다.

일단 세션을 생성하면 session 기본 객체를 통해서 세션을 사용할 수 있다.

 

- session 기본 객체

 

세션을 사용한다는 것은 session 기본 객체를 사용한다는 것을 말한다.

 

session 기본 객체는 request 기본 객체와 마찬가지로 속성을 제공하므로

setAttribute(), getAttribute() 등의 메서드를 사용하여 속성 값을 저장하거나 읽어올 수 있다.

 

추가로 세션은 세션만의 고유 정보를 제공하며, 이들 정보를 구할 때 사용하는 메서드는 다음과 같다.

getId() String 세션의 고유 ID를 구함.
getCreationTime() long 세션이 생성된 시간을 구함. 단위는 1/1000이다.
getLastAccessedTime() long 웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다.

웹 브라우저마다 별도의 세션을 갖는다고 하는데 각 세션을 구분하기 위해 세션마다 고유 ID를 할당하는데 그 아이디를 세션 ID라고 한다.

웹 서버는 웹 브라우저에 세션 ID를 전송한다. 매번 세션 ID를 보내서 웹 서버가 어떤 세션을 사용할지 판단할 수 있게 된다.

 

세션을 유지하려면,

첫번째 요청에 대한 응답에 쿠키를 포함하고, 두 번째 요청부터 같은 쿠키를 가지고 있으면 같은 브라우저에서 온 요청이라고 판단한다.

 

session - attribute

한번 생성된 세션은 지정한 유효 시간 동안 유지된다. 

request 기본 객체가 하나의 요청을 처리하는 데 사용되는 JSP 페이지 사이에서 공유된다면,

session 기본 객체는 웹 브라우저의 여러 요청을 처리하는 JSP 페이지 사이에서 공유된다.

 

세션에 값을 저장할 때는 속성을 사용한다.

값을 저장하려면 setAttribute() 메서드를, 값을 읽으려면 getAttribute() 메서드를 사용한다.

 

ex1)

03attribute1.jsp
03attribute2.jsp
03attribute3.jsp
attribute1을 실행하기 전 attribute2 console 
attribute1을 실행하기 전 attribute3 console

-> attribute1을 실행하기 전 attribute2 console과 attribute3 console의 session attribute food 값은 null 값을 가지게 된다.

attribute1 console - attribute2 console - attribute3 console

-> attribute1을 실행한 후, attribute2와 attribute3을 실행하면 session attribute food 값은 apple을 가지게 된다.

 

ex2)

04attr1.jsp
04attr2.jsp
04attr1 console
04attr2 console

 

ex3)

05attr1.jsp
05attr2.jsp
05attr1 console
05attr2 console

-> map컬렉션으로 여러번 선택하면, 숫자가 늘어나도록 코드를 작성해주었다.

 

ex4)

18from-session.jsp (07redirect 폴더)
18to-session.jsp (07redirect 폴더)
URL
console

-> 저번 게시물 redirect에서 알아보았듯, 

     서로 다른 request 객체이기 때문에 request로 얻은 값은 null 값이 나오게 되고 session으로 얻은 값은 value2가 나오게 된다.

 

session - invalidate

세션을 유지할 필요가 없으면 session.invalidate() 메서드를 사용해 세션을 종료한다.

세션을 종료하면 현재 사용 중인 session 기본 객체를 삭제하고 session 기본 객체에 저장했던 속성 목록도 함께 삭제한다.

 

ex1)

07invalidate1.jsp
07invalidate2.jsp
console

 

ex2)

06login.jsp
06logout.jsp
URL
06login.jsp console
06main.jsp console

 

session - 유효시간

세션 유효 시간은 두 가지 방법으로 설정할 수 있다.

 

첫 번째는 WEB-INF\web.xml 파일에 <session-config> 태그를 사용해 세션 유효 시간을 지정하는 방법이다. 단위 시간은 분 단위이다.

값을 0이나 음수로 설정하면 세션은 유효 시간을 갖지 않게 되고, invalidate() 메서드를 호출하기 전까지 세션 객체가 서버에 유지된다.

즉, 유효시간이 없는 상태에서 invalidate() 메서드를 실행하지 않는다면, 세션 객체가 메모리에 남게 되어 메모리 부족 현상이 발생한다.

web.xml

 

두 번째는 session 기본 객체가 제공하는 setMaxInactiveInterval() 메서드를 사용하는 것이다. 

첫 번째와 달리, 단위 시간은 초 단위이다.

08MaxinactiveInterval.jsp
console


ex1)

10login-form.jsp
10main.jsp
10process.jsp
loginform console
main console
URL

 

 

 

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

 

 

 

 

 

728x90
반응형

'6개월 대장정 > JSP 개념' 카테고리의 다른 글

54일차 - [JSP] scope  (0) 2021.11.09
54일차 - [JSP] cookie  (0) 2021.11.09
53일차 - [JSP] redirect(2)  (0) 2021.11.06
52일차 - [JSP] redirect(1)  (0) 2021.11.04
52일차 - [JSP] <jsp:forward> 액션 태그  (0) 2021.11.04