본문 바로가기
WEB/JSP Servlet

세션, 기본 객체 : seesion

by 노랑파랑 2016. 10. 28.
반응형





세션

* 서버 세션을 사용해 클라이언트의 상태를 저장할 수 있다.

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




session 기본 객체

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

* 웹 컨테이너는 기본적으로 한 웹 브라우저마다 하나의 세션을 생성한다.




1. 세션 생성

1) page 디렉티브의 session 속성을 "true" 로 지정한다.

<%@ page session = "true" %>

* 하지만 session의 기본값이 true이기 때문에 false 로 지정하지 않는 한 세션이 생성된다.

* 세션을 사용하는 서버 프로그램에 웹 브라우저가 처음 접속을 하면 세션을 생성하고, 기 이후의 접속부터는 이 생성되있는 기존의 세션을 사용한다.


2) request.getSession()를 이용한 HttpSession 생성

* 현재 요청과 관련된 session 객체를 리턴한다.

* session이 존재하면 기존에 있는 해당 session을 리턴하고, 존재하지 않으면 새롭게 session을 생성한다.

* getSession(false) 를 하면 session이 생성된 경우에만 session 객체를 구한다. (=세션이 이미 존재하는 경우에만 세션을 리턴한다.)

* page 디렉티브의 session 속성값을 "false"로 지정한 뒤 사용한다.

<%@ page session="false" %>

<%

HttpSession httpsession = request.getSession();

List list = (List)httpsession.getAttribute("list");

list.add(productId);

%>


2. session 기본 객체

* 속성을 제공하므로 setAttribute()와 getAttribute() 메소드를 사용해 속성값을 저장하거나 읽어올 수 있다.

* 세션 정보 관련 메소드

메소드 

리턴 타입 

설명 

getId() 

String 

세션 고유의 ID를 구한다. (세션ID)

getCreationTime() 

Long 

세션이 생성된 시간을 구한다. 시간은 1970년 1월 1일 이후의 흘러간 시간을 의미하며, 1/1000초 단위이다.

getLastAccessedTime() 

Long 

웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다. 시간은 1970년 1월 1일 이후의 흘러간 시간을 의미하며, 1/1000초 단위이다.

   

* 웹 브라우저마다 별도의 세션을 갖는데 이때 각 세션을 구분하기 위해 세션 ID라는 고유의 식별자 할당한다. 웹 서버는 웹 브라우저에 이 세션ID를 전송하고, 웹 브라우저는 웹 서버에 연결할 때마다 매번 세션ID를 보내서 웹 서버가 어떤 세션ID를 사용할지 판단할 수 있게 한다.

* 때문에 웹 서버와 웹 브라우저가 세션ID를 공유할 수 있는 방법이 필요한데 이를 위해 사용하는 것이 쿠키이다. 

SESSIONID, JSESSIONID등의 이름인 쿠키가 세션ID를 공유할 때 사용하는 쿠키이다.



3. 기본 객체의 속성 사용

* request 기본 객체가 하나의 요청을 처리하는데 사용되는 JSP 페이지 사이에서 공유된다면, session 객체는 웹 브라우저의 여러 요청을 처리하는 JSP 페이지 사이에서 공유된다.

* 따라서 웹 브라우저와 1:1로 관련된 값을 저장할 때는 쿠키대신 세션을 사용할 수 있다.

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

세션 값 저장 : session.setAttribute()

세션 값 읽기 : session.getAttribute()



4. 세션 종료

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

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

* session 종료 후 다음 요청에서 session 을 사용하면 새로운 session 기본 객체를 생성한다.



5. 세션 유효시간

* 세션은 최근 접근 시간을 갖는다. session 객체를 사용할 때 마다 갱신되는데 getLastAccessesTime() 메소드를 통해 알수 있다. 

* 세션은 마지막 접근 시간 이후 일정시간이 지나면 자동으로 세션을 종료하는 기능을 갖고 있는데, 이를 타임아웃이라 한다.

* 세션의 유효시간을 설정하는 방법은

1) WEB/INF/web.xml 파일에서 <session-config> 태그를 사용해 유효시간을 지정한다. ( 단위 : 분 )

<web-app....>

...

<session-config>

<session-timeout> 50 </session-timeout>    //50분

</ssesion-config>

</web-app> 

2) session 객체의 setMaxInactiveInterval() 메소드를 사용해 유효시간을 설정한다. ( 단위 : 초 )

session.serMaxInactiveInterval( 60 * 60); //60분

* 세선을 제거하지 않으면(유효시간 설정 하지 않으면) 계속 웹 컨테이너의 메모리에 남아있어 메모리 부족 현상이 발생할 수 있다.




서블릿 컨텍스트와 세션

* 하나의 웹 브라우저라 하더라도 세션ID 값을 같는 쿠키는 서로 다른 경로에 있을 때 서로 다른 값을 갖는다.

* 이는 두 경로가 서로 다른 웹 어플리케이션이기 때문이다. 

* 세션ID를 보관할 때 사용한 JSESSIONID 쿠키의 경로로 웹 어플리케이션의 컨텍스트 셩로를 사용한다. 서로 다른 우 웹 어플리케이션이 다른 세션 ID를 사용하고 다른 JSESSIONID 쿠키를 사용한다는 것은 서로 다른 웹 어플리케이션이 세션을 공유하지 않는 다는 뜻이며, 한 웹브라우저임에도 각 웹 어플리케이션이 사용하는 session 객체가 다르다는 뜻이다. 

반응형

'WEB > JSP Servlet' 카테고리의 다른 글

페이지 모듈화 : include 디렉티브  (0) 2016.10.28
페이지 모듈화 : <jsp:include>  (0) 2016.10.28
쿠키  (0) 2016.10.28
자바빈 (JavaBeans)  (0) 2016.10.27
에러 처리 : 익셉션, 에러 페이지  (0) 2016.10.27