서버의 세션 수 제한하는 방법
만약 사용자가 로그인 했을때 서버에 세션 객체를 생성한다고 가정했을때 특정 사용자의 수 만큼만 접속을 제한하고 싶은 경우 어떻게 해야할까요? 가장 단순한 방법으로는 서블릿 컨테이너(서버)의 세션 객체의 최대 생성 수를 제한하면 됩니다. 물론 요즘은 인증, 인가와 관련된 수많은 프레임웍이 있기에 실무에서도 이러한 방식을 사용하는 경우가 있는지는 의문입니다. 아마 서버의 사양으로 인한 메모리 관리 용도로 사용하는 경우정도가 있지 않을까 싶습니다.



설정 방법
톰캣의 경우 [톰캣 설치 디렉터리]/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


참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,