最近設計一個VB.Net的項目,應用了AjaxPro2,覺得確實不錯,很多妙用在其中,下面就記錄一個用Ajax來處理用戶在線離線的問題,沒有Ajax的時候都是寫到Session_End裡面,用Ajax也很容易實現,在這裡假設你的Ajax已經配置好,如果沒有AjaxPro的支持,你就要考慮項目是否要用AJax了,因為它會增加項目大量的腳本。
首先你要有一個用戶表,表裡面設計一個字段ONLINEKBN(在線區分),默認1為在線,0為離線。
幀結構主窗口關閉前事件,此事件點擊浏覽器關閉的時候觸發。
<script type="text/Javascript">
function window.onbeforeunload()
...{
var strUserId = document.getElementById("hidUserId").value;
CO2Reduction.Index.AJax_UpdKbn(strUserId);
};
</script>
//隱藏控件
<input id = "hidUserId" runat="server" type="text" value=""/>
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裡面了。