달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
내가 6년전에 썼던 글인데 오늘 우연히 검색하다가 보게 됐다. ㅋㅋ

제목 : Re: 접속된 사용자 정보 지우기에 대해서..
글쓴이: 최유복(jnylove) 2001/02/10 14:34:31 조회수:359 줄수:80

도움이 될지 모르겠습니다.
저는 다음과 같은 방법으로 브라우저를 죽이거나 컴퓨터가 다운되는등의
비정상적인 종료에 대해서 사용자의 세션을 관리했던 적이 있습니다.

우선 처음에 로그인을 하면서 세션을 만들 때, 세션에 리스너라고 하는걸 하나
넣어둡니다.
그 리스너가 하는 일은 리스너가 세션에 바인딩되거나 언바인딩 될경우 특정 메소드를
호출하도록 하였습니다.
그리고 비정상 종료에 대한 문제는 프레임을 이용해서 안보이도록 프레임을 나눠서
안보이는 곳에 jsp 파일을 뒀습니다.
이 페이지가 언로드 되면 세션의 값을 지우도록 했습니다.

Blank.jsp와 LoginCount.java, LoginListener.java에 대한 내용은 다음과 같습니다.
Blank.jsp : 로그인 하면서 리스너를 세션에 바인딩 시킴, 이 페이지가 언로드 될경우
해당 세션값 삭제
LoginCount.java : 접속자 증가/ 감소
LoginListener.java : 리스너

Blank.jsp ===============================================================
<%
session.setAttribute("login.listener", new LoginListener(getServletContext()));
%>
<script language="JavaScript">
<!--
function delSession() {
window.open('invalidate.jsp','Logout','scrollbars=no,width=400,height=200');
}
//-->
</script>
<body onUnLoad="delSession()">
<form name="logout">
<input type=hidden name="logflag" value="">
</form>
</body>

LoginCount.java =========================================================
public class LoginCount
{
public static Object lockObject = new Object();
public static int logCount = 0 ;

public static synchronized void increaseCount() {
synchronized (lockObject) {
logCount++;
}
}

public static synchronized void decreaseCount() {
synchronized (lockObject) {
logCount--;
}
}
}

LoginListener.java ======================================================
public class LoginListener implements HttpSessionBindingListener
{

ServletContext context;

public LoginListener(ServletContext context) {
this.context = context;
}

// listenter 가 session에 binding 될 때 호출
public void valueBound(HttpSessionBindingEvent event)
{
LoginCount.increaseCount();
}

// listenter 가 session에 unbinding 될 때 호출
public void valueUnbound(HttpSessionBindingEvent event)
{
LoginCount.decreaseCount();
}
}

미숙하나마 도움이 되었으면 좋겠습니다.

from:
http://www.javaservice.net/~java/bbs/read.cgi?m=qna&b=QandA&c=r_p&n=981783271

'그거 > Tech' 카테고리의 다른 글

Solaris 시스템 모니터링 방법  (0) 2007.05.11
[펌] SUN 사용 설명서  (0) 2007.05.04
SunOS5.9에 Mysql 설치하기  (0) 2007.04.16
SunOS 5.9에 vim7.0 설치하기  (0) 2007.04.16
SunOS 5.9에 gcc 설치하기  (0) 2007.04.16
:
Posted by 뽀기