最近设计一个VB.NET的项目,应用了AjaxPro2,觉得确实不错,很多妙用在其中,下面就记录一个用Ajax来处理用户在线离线的问题,没有Ajax的时候都是写到Session_End里面,用Ajax也很容易实现,在这里假设你的Ajax已经配置好,如果没有AjaxPro的支持,你就要考虑项目是否要用Ajax了,因为它会增加项目大量的脚本。
< 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
首先你要有一个用户表,表里面设计一个字段ONLINEKBN(在线区分),默认1为在线,0为离线。
帧结构主窗口关闭前事件,此事件点击浏览器关闭的时候触发。
<
script type
=
"
text/javascript
"
>
function window.onbeforeunload()
... {
var strUserId = document.getElementById("hidUserId").value;
CO2Reduction.Index.Ajax_UpdKbn(strUserId);
} ;
</ script >
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里面了。
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里面了。