QnA에서 힌트를 얻어서...만들었습니다...
필요하신 분은 참고하세요~
우선 두개의 테이블을 만들었습니다...
checklog Table
- ip(접속 ip)
- id(사용자 id)
- loginTime(로그인 시간)
duplicatelog Table (중복접속이 일어났을 경우 로그기록을 남기기 위해서 존재)
- id(사용자 id)
- date(날짜)
- ip(접속 ip)
자주 쓰는 테이블은 checklog Table 하나면 됩니다. 중복체크를 로그기록으로 남기지 않으시면, duplicatelog 테이블은 필요 없습니다.
그래서, 로그인 할때 마다
'로그인 중복 방지#################################################################
' 현재날짜 구하기
strYear = Year(now)
strMonth = cint(Month(now))
strDay = cint(Day(now))
if cint(strMonth) < 10 then
strMonth = "0" & strMonth
end if
if cint(strDay) < 10 then
strDay = "0" & strDay
end if
cur_date = strYear & "/" & strMonth & "/" & strDay
' 현재날짜 구하기 끝
ip = Request.Servervariables("REMOTE_ADDR")
Set dblog=Server.CreateObject("ADODB.Connection")
dblog.open("logEvent")
sql = "select * from checklog where id='" & id & "'"
set rsLog = dblog.execute(sql)
'
if rsLog.EOF or rsLog.BOF then '중복 로그인이 아님
sql = "insert into checklog (id, ip, loginTime) values ('"&id&"', '"&ip&"', '"&cur_date&"')"
dblog.execute sql
else '중복 로그인
sql = "update checklog set id='"&id&"', ip='"&ip&"', loginTime='"&cur_date&"'"
dblog.execute sql
end if
'
' 사용자 id로 된 데이터가 없으면 insert를 id로 된 데이터가 있으면 update를 시킵니다.
dblog.close
set dblog = nothing
'##############################################################################
그리고, 현재 id와 ip가 맞는지 검사 해주면 되겠죠.
중복 방지가 필요한 페이지에서
'로그인 중복 방지#################################################################
ip = Request.Servervariables("REMOTE_ADDR")
Set dblog=Server.CreateObject("ADODB.Connection")
dblog.open("logEvent")
sql = "select * from checklog where id='" & session("mem_id") & "'"
set rsLog = dblog.execute(sql)
if rsLog.EOF or rsLog.BOF then '로그온 안되거나 update 안됨
else
if rsLog("ip") <> ip then
sql = "insert into duplicatelog (id, ip, date) values ('" & session("mem_id") & "', '" & ip & "', '" & rsLog("loginTime") & "')"
dblog.execute sql
%>
<script>
alert("동일 아이디의 사용자가 접속하여 세션이 종료됩니다.");
location.class='MIME' href="include/login_ok.asp?sw=logout&returnUrl=<%=Request.ServerVariables("URL")&"?"&Request.ServerVariables("QUERY_STRING")%>";
// 강제로 로그아웃
</script>
<%
end if
end if
dblog.close
set dblog = nothing
'로그인 중복 방지#################################################################
저장된 ip와 클라이언트의 ip가 다르면 duplicatelog Table에 기록을 하고, 경고창을 내보내면서...강제로 로그아웃 시킵니다.
그러면 새로 접속된 세션은 살아있으면서 기존에 있던 세션이 끊어지게 되겠죠...기존에 세션이 있다면요...
그리고, 별 필요는 없지만...깔끔하게 정리하기 위해
로그아웃 버튼이 눌렸을때
'로그인 중복 방지#################################################################
Set dblog=Server.CreateObject("ADODB.Connection")
dblog.open("logEvent")
sql = "delete from checklog where id='" & session("mem_id") & "'"
dblog.execute sql
'#################################################################################
만들어진 레코드를 지워놓습니다.
물론, 안 지워도 상관은 없구요~
그럼, 도움이 되셨길...^-^;;;