# setInterval()과 XMLHTTP 를 이용하여 페이지 Refresh


* 장점
 1) 브라우저 진행율 표시 안나타남
 2) Refresh 소리 없음


--> 이 소스는 정해진 시간마다 회원이 로그아웃 했는지를 체크하기 위해 만들었습니다.
로그인상태의 회원은 LOGON 값을 현재시간으로 업데이트하고,
로그아웃상태인 회원은 LOGON 값이 널(null)이 됩니다.


* logon.asp 는 로그인한 회원정보를 보여주는 파일입니다.
* logon_update.asp 는 logon_time.asp 파일을 일정간격으로 refresh한 효과를 냅니다.
* logon_time.asp 파일은 현재시간을 LOGON 값에 넣어줍니다.




(1) XMLHTTP 설명


1. XMLHTTP 메서드


Abort   현재 HTTP 요청을 취소합니다.
GetAllResponseHeaders 응답 메시지에서 모든 헤더 필드를 검색합니다.
GetResponseHeader                 응답 본문에서 HTTP 헤더의 값을 검색합니다.
Open   HTTP서버에 대한 연결을 엽니다.
SetRequestHeader                 요청 헤더 필드 중 하나를 설정합니다.
Send   HTTP 서버로 요청을 보냅니다. 본문이 포함될 수 있습니다.



2. XMLHT TP 속성 : 속성을 사용하여 요청 확인
--> XMLHTTP 속성을 사용하면 요청을 확인할 수 있을 뿐만 아니라 서버로부터
반환된 값을 검색하여 요청으로 발생한 모든 오류를 확인할 수 있습니다.


=========================================================================
속성  값  설명
=========================================================================
OnReadyStateChange   이벤트 처리기 참조 비동기 작업에서만 사용합니다.
    이 속성은 데이터가 서버에서 반환되는 것과 같은
    대기 상태가 변경될 때 이벤트 처리기 호출을 지정합니다.


ReadyState           Integer  비동기 작업의 상태, uninitialized (0), loading (1),
    loaded (2), interactive (3), completed (4)를 나타냅니다.


ResponseBody Variant  배열 응답의 본문을 배열로 반환합니다.
ResponseStream IStream  응답의 본문을 ADO Stream 개체로 반환합니다.
ResponseText String  응답의 본문을 텍스트 문자열로 반환합니다.
ResponseXML XMLDocument 개체 응답의 본문을 MSXML XMLDOM 파서로 분석된 것으로
                                                                반환합니다.
Status  Long  서버가 반환한 HTTP 상태 코드
StatusText  String  HTTP 응답 라인 상태
=========================================================================



(2) 소스 설명


'----------logon.asp 시작------------------


' member_uid : 회원 고유번호


<iframe width="0" height="0" border="0" frameborder="0" src="/logon_update.asp?member_uid=<%=member_uid%
>"></iframe>


'----------logon.asp 끝 ------------------





'----------logon_update.asp 시작------------------


<%
Dim member_uid
member_uid = Trim(Request.QueryString("member_uid"))  ' 회원 고유번호
%>


<html>
<head>
<script language="javascript">
<!--


// logon_update.asp 파일을 로드한다.
function pageLoad() {


    // (1) XMLHTTP 객체를 생성합니다.
    var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP")


    // (2) HTTP서버에 대한 연결을 엽니다.
    xmlHTTP.open("get","logon_time.asp?member_uid=<%=member_uid%>",false);


    // (3) HTTP 서버로 요청을 보냅니다.
    xmlHTTP.send();


}


function intervalCall() {


    setInterval("pageLoad()", 5000);  // 5초간격으로 pageLoad()함수 호출


}


//-->
</script>
</head>
<body onload="intervalCall()">
</body>
</html>


'----------logon_update.asp 끝------------------




'----------logon_time.asp 시작------------------


<!--#include virtual="/dbconnect.asp"-->
<%
On Error Resume Next


Dim member_uid
member_uid = Trim(Request.QueryString("member_uid"))  ' 회원 고유번호


Dim Dbcon, Rs, sqlQuery


' dbconnect.asp 에 정의된 DbOpen()함수를 통해 DB Connection 객체 생성
'(@@ 이부분은 직접 정의하여 사용하세요 ^^;)
Set Dbcon = DbOpen()


' 로그인한지 10초가 초과한 회원의 logon필드값을 널(NULL)로 업데이트
strSQL = ""
strSQL = "UPDATE MEMBER_INFO"
strSQL = strSQL & " SET LOGON = NULL"
strSQL = strSQL & " WHERE DATEDIFF(SECOND, LOGON, getdate()) > 10"
Dbcon.Execute(strSQL)



sqlQuery = ""
sqlQuery = "SELECT * FROM MEMBER_INFO WHERE MEMBER_UID="& member_uid


' 회원 로그온 시간 업데이트
Set Rs = Server.CreateObject("ADODB.Recordset")
With Rs
    .Source = sqlQuery
    .ActiveConnection = Dbcon
    .CursorType = adOpenStatic
    .LockType = adLockPessimistic
    .Open , , , ,adCmdText
 .Fields("LOGON_TIME") = Now
    .Update
End With


' Error 체크 (@@ ErrorCheck() 함수도 dbconnect.asp 에 정의됨.)
Call ErrorCheck("회원 로그온 시간 UPDATE 처리")


Rs.Close
Set Rs = Nothing


' DB Connection 객체 Close
DbClose(Dbcon)
%>



'----------logon_time.asp 끝------------------

2009/05/26 13:45 2009/05/26 13:45

Trackback Address :: https://youngsam.net/trackback/505