중복로그인 체크를 해야하는데 컴포넌트를 만들 시간도 없고, 애플릿을 만들 시간도 없고..
뭐 사실은 만들 자신이 없다는 말이 더 맞겠지만 ㅡㅡ;;;
그래서 아래와 같이 구성했습니다.
onunload 로 페이지를 닫거나 새로고치거나 다른페이지로 이동할 시
이벤트를 잡을 수 있고, 각각의 구분도 할 수 있다는 걸 알고 있는 상태에서
어찌보면 꽁수 일수도 있지만...
하여튼 아래처럼 구성해봤습니다. 결~
1) 화면쪽
common.js나 기타 link된 js파일젤 상단쯤에 아래와 같이 선언
아니면 해당 페이지 마다 <body onunload="exitCd()"> 을 선언해야됨
js파일과 <body의 onunload 이벤트에 동일한 이벤트를 잡았을시 <body 에 있는 이벤트만 적용됨
//----------------------
// 페이지에서 벗어나는 이벤트시 exitCo 함수 호출
// onunload 이벤트는 페이지 닫기, 새로고침, 다른페이지로 이동시 등에 발생)
//----------------------
window.onunload = exitCo;
//-------------------------------------------------------------------
// onunload이벤트 발생시 각 상황별 엑션을 나눠줌
// 호출예) onunload 이벤트시 함수 호출
// 설명) 밑의 코드로 강제 창닫기의 이벤트를 잡아낼 수 있으므로,
// 이벤트 발생시 새창을 열고, 창이 열리는 좌표는 모니터상에서 보이지 않는 좌표로 잡아주고,
// logout_test.jsp는 로그아웃을 하고, 자동으로 창이 닫히는 작업을 한다.
//-------------------------------------------------------------------
function exitCo() {
//강제 창닫기(x닫기와 Alt+F4 포함)
if (self.screenTop > 9000) {
window.open('/logout_test.jsp','win','left=2000,top=2000,width=1,height=1,statusbar=no,scrollbars=yes,toolbar=no,channelmode=no');
}
/*
else {
if(document.readyState == "complete") {
//alert("새로고침");// 새로고침
}else if(document.readyState == "loading") {
//alert("다른사이트 이동");// 다른 사이트로 이동
}
}
*/
}
2) 자바쪽
중복로그인 체크는 허광남님이 쓰신 모델2로 다시 배우는 JSP를 참고했습니다.
(OKJSP 사이트에 소스가 있는걸로 알고 있습니다.)
(싱글톤으로 HashTable에 아이디와 SessionId를 담아두고, 비교하는 방식으로 처리)
/**
* ID 와 PW 이 맞는지 확인하는 메소드
* @param userID 사용자 아이디
* @param userPassword 사용자 패스워드
* @return loginChkStatus 0:없는 아이디, 1:틀린 비밀번호, 2:성공, 3:중복로그인
* @throws BizException
*/
public String isValid(HttpServletRequest request) throws BizException{
String userId = CommUtil.nullToEmptyString(request.getParameter("userId")).toUpperCase();
String userPassword = CommUtil.nullToEmptyString(request.getParameter("userPassword")).toUpperCase();
/* 로그인 체크하는 부분 */
Hashtable loginUserInfo = DaoLogin.getLoginCheck(userId, userPassword);
String loginChkStatus = (String)loginUserInfo.get("loginChkStatus");
//로긴이 성공하면 loginUsers 목록에 등록하고, 세션객체를 생성한다.
if(loginChkStatus.equals(Gubun.LOGIN_OK)){
if(loginManager.isUsing(userId)){
loginChkStatus = "3";
}else{
setSession(request, loginUserInfo);
}
loginLogging(request, loginUserInfo);
}
return loginChkStatus;
}
3) logout_test.jsp
/***************************
* logout_test.jsp
* 로그아웃후 자동창닫기
***************************/
<%@page session="false" contentType="text/html;charset=euc-kr" import="com.goodmansoft.basic.*" %>
<%
HttpSession session = request.getSession(false);
if(session != null) {
session.invalidate();
%>
<script>
window.close();
</script>
<%
}
%>
문제점 >>
중복 로그인 체크에 대해
- Alt+F4로 화면 닫을때는 인식됨
- Ctrl+Alt+Delete로 프로세스를 죽일때는 인식됨
- 파워를 꺼버리면.. 세션이 죽지 않음
문제점2>>
중복체크시 주지 시킬점-
1) 페이지를 열고, goodmansoft 로그인한 상태에서 신규페이지를 열고, 로그인을 할 경우에는 중복되었다고 메세지가 뿌려짐
2) 페이즈를 열고, gooodmansoft 로그인한 상태에서 다른 페이즈로 이동하여, 창을 닫는 경우에는 이벤트가 발생하지 않아서 중복체크에러가 계속 발생함
'마루아라는 개발쟁이 > ASP' 카테고리의 다른 글
DHTML 게시판 웹에디터 만들다 만놈 (0) | 2022.12.07 |
---|---|
게시판 글쓰기에 HTML EDIT 달기 (0) | 2022.12.07 |
세션을 DB로 관리하기 + 쪽지 확인하기 (0) | 2022.12.07 |
같은 아이디로 동시접속 하는걸 방지하는 방법 (0) | 2022.12.06 |
중복 로그인 처리 방법 (0) | 2022.12.06 |