서버의 세션 수 제한하는 방법
만약 사용자가 로그인 했을때 서버에 세션 객체를 생성한다고 가정했을때 특정 사용자의 수 만큼만 접속을 제한하고 싶은 경우 어떻게 해야할까요? 가장 단순한 방법으로는 서블릿 컨테이너(서버)의 세션 객체의 최대 생성 수를 제한하면 됩니다. 물론 요즘은 인증, 인가와 관련된 수많은 프레임웍이 있기에 실무에서도 이러한 방식을 사용하는 경우가 있는지는 의문입니다. 아마 서버의 사양으로 인한 메모리 관리 용도로 사용하는 경우정도가 있지 않을까 싶습니다.
설정 방법
톰캣의 경우 [톰캣 설치 디렉터리]/conf/context.xml에 세션객체의 최대 수를 제한할 수 있는 maxActiveSessions 속성을 지원합니다.
<Context> 태그 하위에 <Manager> 태그를 넣고 속성으로 maxActiveSessions 속성을 지정하여 세션 최대 생성 수를 지정합니다. 다음은 최대 세션 객체 수를 두개로 제한하는 설정입니다. 이 설정이 없는 경우의 기본값은 -1로 생성되는 세션객체의 수에 제한이 없음을 의미합니다.
<Context>
...생략...
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
...생략...
<!-- 최대 세션 수 두개로 제한 -->
<Manager maxActiveSessions="2"></Manager>
</Context> |
cs |
해당 설정 후 생성되는 세션객체의 수가 설정된 값이 된 상태에서 추가로 세션 객체를 생성하는 시점에서 TooManyActiveSessionsException이 발생합니다. 이 Exception을 처리하는 페이지를 만들어두어 사용자 접속 수용량이 꽉 찼다는것을 사용자에게 알려줄 수 있을것 같습니다.
7월 09, 2019 1:05:24 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet [jsp] in context with path [/myApp] threw exception [javax.servlet.ServletException: org.apache.catalina.session.TooManyActiveSessionsException: createSession: Too many active sessions] with root cause
org.apache.catalina.session.TooManyActiveSessionsException: createSession: Too many active sessions
at org.apache.catalina.session.ManagerBase.createSession(ManagerBase.java:646)
at org.apache.catalina.connector.Request.doGetSession(Request.java:3044)
at org.apache.catalina.connector.Request.getSession(Request.java:2434)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:896) |
cs |
참고글
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] HttpSessionBindingListener 리스너 사용법 (0) | 2019.07.14 |
---|---|
[서블릿/JSP] 톰캣 8.0 이하에서 HTTP Response 메시지에서 Server 값 바꾸기 (0) | 2019.07.10 |
[서블릿/JSP] 세션 timeout 설정 방법들과 적용 우선순위 (0) | 2019.07.09 |
[서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기 (2) | 2019.01.24 |
[서블릿/JSP] web.xml에서 filter-mapping 설정의 dispatcher 설정에 대하여 (1) | 2019.01.16 |