asp.net关闭浏览器后强制用户离线

asp.net用户登录后,状态更新为在线,在点击程序中退出按钮后自动离线,并记录到日志表中。但是如果强制关闭浏览器,就无法记录。
后来想通过心跳包的方式,在正常登录并在线时每隔一分钟刷新一次登录状态,后台数据库定时2分钟执行一次检测是否异常退出的存储过程,如果最后一次心跳包时间与当前系统时间相比超过3分钟,则强制用户离线。
此方式个人在winform c/s程序中经常使用。
实现核心代码:
在登录后的主页面中定时执行下面的js:
window.setInterval("RefLogin()", 60000);//登陆后定时注册在线信息
function RefLogin() {
    $.ajax({
        //要用post方式   
        type: "Post",
        //方法所在页面和方法名   
        url: "Default.aspx/LogIn",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            
        },
        error: function (err) {
            alert(err);
        }
    });
}



主页面Default.aspx/LogIn方法:

[WebMethod]
        public static void LogIn()
        {
            LogOperation.RefreshLoginStatus();
        }

LogOperation.RefreshLoginStatus()


/// <summary>
        /// 刷新用户登陆状态
        /// </summary>
        public static void RefreshLoginStatus()
        {
            string strID=System.Web.HttpContext.Current.Session["USERID"].ToString();
            string strsql = "update t_sysuser set Status='1',RefreshTime=GETDATE() where id='" + strID + "'";
            DbHelper.CurrInstance.ExecuteNonQuery(strsql);
        }

sqlserver定时循环执行存储过程:
ALTER PROCEDURE [dbo].[RefreshLogin]
	
AS
BEGIN
	
	declare @Id varchar(36)
	declare @RealName Nvarchar(10)
	
	DECLARE curDel CURSOR FOR SELECT ID,Realname FROM t_sysuser where Status='1' and dateadd(minute,-3,GETDATE())>RefreshTime
	open curDel
	fetch next from curDel into @Id,@RealName
		while @@FETCH_STATUS = 0
			begin
				insert into t_log(ID,UserID,RealName,LogTime,Categories,BusinessID,LogContent) 
				values(newid(),@Id,@RealName,GETDATE(),'退出','','强制退出');
				update t_sysuser set Status='0' where ID=@Id;
				fetch next from curDel into @Id,@RealName
			end
	close curDel
	DEALLOCATE curDel	
END







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值