首先你要有一個用戶表,表裡面設計一個字段ONLINEKBN(在線區分),默認1為在線,0為離線。
幀結構主窗口關閉前事件,此事件點擊浏覽器關閉的時候觸發。
<script type="text/Javascript">
function window.onbeforeunload()
...{
var strUserId = document.getElementById("hidUserId").value;
CO2Reduction.Index.AJax_UpdKbn(strUserId);
};
</script>Login.ASPx登陸的時候,更新用戶的狀態為在線狀態(1)。

<AjaxPro.AJaxMethod()> _
Public Function CheckUserInfo()Function CheckUserInfo(ByVal strUserID As String, _
ByVal strPassWord As String) As String
......................
......................
//Check成功後,更新表裡的在線區分
strUpdSql.Append(" UPDATE 用戶表 SET ")
strUpdSql.Append(" ONLINEKBN = '1' ")
strUpdSql.Append(" WHERE ")
strUpdSql.Append(" USERID= ")
strUpdSql.Append(" '" + strUserID + "'")
strUpdSql.Append(" AND ")
strUpdSql.Append(" KBN='0'")
......................
......................
Return ""
End Function
因為Login.ASPx是作為主窗口的一個幀畫面的,所以用AJax驗證用戶後在Login.JS裡的回調函數裡給主窗口的隱藏控件設置用戶登陸番號。
window.parent.document.getElementById('hidUserId').value=document.getElementById('txtUserID').value;
主窗口關閉觸發事件AJax調用後台函數,利用參數(用戶),更新用戶表裡面的在線區分(0)。
<AjaxPro.AJaxMethod()> _
Public Function Ajax_UpdKbn()Function AJax_UpdKbn(ByVal strUserId As String) As Boolean
//連接我就不寫在這裡了
Dim strUpdSql As New StringBuilder
strUpdSql.Append(" UPDATE 用戶表 SET ")
strUpdSql.Append(" ONLINEKBN = '0' ")
strUpdSql.Append(" WHERE ")
strUpdSql.Append(" USERID= ")
strUpdSql.Append(" '" & strUserId & "'")
strUpdSql.Append(" AND ")
strUpdSql.Append(" KBN='0'")
Return True
End Function可以了,關閉窗體,狀態就變回來了,不用寫到Session_End裡面了。