스프링 세션 시간 연장 - seupeuling sesyeon sigan yeonjang

[JAVA/JSP] 세션 시간 설정

HttpSession이란?

- 하나 이상의 페이지 요청에서 사용자를 식별하거나, 웹 사이트를 방문하고

  해당 사용자에 대한 정보를 저장하는 방법을 제공하는 인터페이스입니다.

1. 특정 경우에 타임아웃 설정

ex) 클라이언트가 20분동안 요청이 없으면 세션 제거

<%     session.setMaxInactiveInterval(20*60); // 초 단위 %>

2. DD(Deployment Descriptor)에서 전체 세션 타임아웃을 설정

<web-app>     
	<session-config>         
    	<session-timeout> 30 </session-timeout> <!-- 분 단위  -->   
    </session-config> 
</web-app>

- 클라이언트가 30분동안 요청이 없으면 세션 제거

(파일경로 : WEB-INF/web.xml)

3. 설정하지 않으면 WAS 기본 디폴트 값으로 적용

Tomcat(conf/web.xml)의 경우 30분이 DEFAULT입니다.

JEUS

1. WEB-INF/web.xml

<web-app>

  <session-config>

	<session-timeout> 30 </session-timeout> <!-- 분 단위-->

  </session-config>

</web-app>

2. ${JEUS경로}/config/컨테이너명/엔진명/webcommon.xml

<web-app>

  <session-config>

	<session-timeout>30</session-timeout>

  </session-config>

</web-app>

3. ${JEUS경로}/config/컨테이너명/WEBMain.xml

<web-container>

	<context-group>

		<session-config>

			<timeout>30</timeout>

		</session-config>

	</context-group>

</web-container>

우선순위

(우선순위 : Application> Container > Was)

*세션 유지시간은 해당 세션을 생성한 사용자의 브라우저 요청이 있을 때마다 갱신됩니다.

spring 환경에서 session(세션) 시간을 변경 할 수 있다.

spring 내 web.xml 에 아래와 같이 설정

 - 시간 기준은 '분'

<session-config>
<session-timeout>60</session-timeout>
</session-config>

spring 뿐만 아니라 웹 서버 환경에서도 설정할수 있다.

Apach Tomcat 기준 

apache-tomcat-x.x.x\conf\web.xml

위 web.xml 에서도 동일 하게 

<session-config>

<session-timeout>30</session-timeout>

</session-config>

로 설정 할 수 있다.

둘의 우선순위는 어느 곳의 우선순위가 더 높은 지는 추후 확인 해봐야 될것 이다.

출처 : http://www.okjsp.pe.kr/seq/200436(JSP QnA)

Q)은행처럼 세션시간이 10분정도 지나면 연장을 하고 싶은데요.. 사이트가 크고 다양한 경우에도 정확히 운영될려면 프로그램으로 가능한지.. 아님 별도 솔루션이 있는지 궁금합니다.

실제 은행시스템은 어떻게 운영되고 있는건지 혹시 아시는분 계시면 꼭 좀 답변부탁드립니다.

A)javascript로 10분 카운트 하시고, 10분 됐을때 Ajax로 무의미한 거래 한번 날려주세요.(세션 타임은 적당히 15분 정도로 하시면 됩니다, 주의사항-alert 시 timeout 정지되는 사항 고려요)
1금융권 은행도 이렇게 처리되고 있습니다.(100% 확실한곳 1곳, 예상 1곳)

-------------------------------------------------------------------------------------------------------

출처 : http://m.kin.naver.com/mobile/qna/detail.nhn?d1id=1&dirId=1040202&docId=73554307&qb=amF2YXNjcmlwdCDshLjshZgg7Jew7J6l&enc=utf8&section=kin&rank=1&search_sort=0&spq=0

질문글대로 은행에서와 같은 시간 만료를 자바스크립트로 해서

시간을 카운트 하게 했습니다.

그래서 카운트가 종료되면 페이지 이동을 시켜서 세션을 끊어버리게끔 단순하게 했는데요

"연장" 하는 버튼 클릭시 카운트 되는 시간을 초기에 지정해놨던 시간으로 되돌리고 싶은데

아무리 생각해봐도 방법을 모르겠네요.

소스는 아래와 같습니다.

<script>

var iMinute = 10;// 시간 지정 분
var iSecond = iMinute * 60 ; //초단위로 환산
var timerchecker = null;

onload=initTimer //페이지 로드시 initTimer함수 실행(시간 카운트)

Lpad=function(str, len)
{
str = str + "";
while(str.length < len)
{
str = "0"+str;
}
return str;
}

initTimer=function()
{
rMinute = parseInt(iSecond / 60);
rSecond = iSecond % 60;
if(iSecond > 0){
timer.innerHTML = "<img src='/member/img/sout1.gif' border='0' align='absmiddle'>&nbsp;"+Lpad(rMinute, 2)+":"+Lpad(rSecond, 2);
iSecond--;
timerchecker = setTimeout("initTimer()", 1000); // 1초 간격으로 체크
}else {
clearTimeout(timerchecker);
document.goint.submit();
}
}

-------------------------------------------------------------------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title> sjisbmoc </title>

<script language='javascript'>

<!--

var iMinute;// 시간 지정 분

var iSecond; //초단위로 환산

var timerchecker = null;

window.onload = function()

{

fncClearTime();

initTimer(); //페이지 로드시 initTimer함수 실행(시간 카운트)

}

Lpad = function(str, len)

{

str = str + "";

while(str.length < len)

{

str = "0"+str;

}

return str;

}

initTimer = function()

{

rMinute = parseInt(iSecond / 60);

rSecond = iSecond % 60;

if(iSecond > 0)

{

timer.innerHTML = "<img src='/member/img/sout1.gif' border='0' align='absmiddle'>&nbsp;"+Lpad(rMinute, 2)+":"+Lpad(rSecond, 2);

iSecond--;

timerchecker = setTimeout("initTimer()", 1000); // 1초 간격으로 체크

}

else

{

clearTimeout(timerchecker);

document.goint.submit();

}

}

function fncClearTime()

{

iMinute = 10;

iSecond = iMinute * 60;

}

//-->

</script>

</head>

<body leftmargin='0' topmargin='0'>

<form name='frm'>

<span id='timer'></span>&nbsp;<input type='button' value='연장' onclick='javascript:fncClearTime();'>

</form>

</body>

</html>