C#MVC和layui模拟单例登陆(有瑕疵,没做强制下线,某些情况下还是可以多次登陆)

 /// <summary>
        /// 登陆判断
        /// </summary>
        /// <param name="username"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public ActionResult Login(string userName, string password)
        {
            string statudate = string.Format("select * from users where userID='{0}' and userpassword='{1}'", userName, password);
            DataTable dtstatu = DBHelper.Find(statudate);
            if (dtstatu.Rows[0]["statudate"]==null)
            {
                dtstatu.Rows[0]["statudate"]   = DateTime.Now;
            }
            TimeSpan span =DateTime.Now -  Convert.ToDateTime(dtstatu.Rows[0]["statudate"].ToString());
            int day =Convert.ToInt32(span.Days.ToString().PadLeft(2, '0'));
            int Hours = Convert.ToInt32(span.Hours.ToString().PadLeft(2, '0'));
            int Minutes = Convert.ToInt32(span.Minutes.ToString().PadLeft(2, '0'));
            int Seconds = Convert.ToInt32(span.Seconds.ToString().PadLeft(2, '0'));

            if (day > 0||Hours>0||Minutes>=3)
            {
                string upstatudate = string.Format("update users set statu=0 where userID='{0}'", userName);
                DBHelper.Execute(upstatudate);
            }

            string sql = string.Format("select * from users where userID='{0}' and userpassword='{1}'", userName, password);
            DataTable dt = DBHelper.Find(sql);
            if (dt != null && dt.Rows[0]["statu"].ToString()=="0")
            {
                List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
                foreach (DataRow dr in dt.Rows)//每一行信息,新建一个Dictionary<string,object>,将该行的每列信息加入到字典
                {
                    Dictionary<string, object> result = new Dictionary<string, object>();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        result.Add(dc.ColumnName, dr[dc].ToString());
                    }
                    list.Add(result);
                }
                userInfo.UserID = userName;
                userInfo.Userpassword = password;
                Session["userName"] = dt.Rows[0]["userID"].ToString(); 
                Session["identity"] = dt.Rows[0]["identity"].ToString();
                Session["statu"] = dt.Rows[0]["statu"].ToString();
                string statusql = string.Format("update users set statu=1 where userID='{0}'", dt.Rows[0]["userID"].ToString());
                DBHelper.Execute(statusql);
                return Content("1");
            }
            else if (dt!=null && dt.Rows[0]["statu"].ToString() == "1")
            {
                return Content("2");
            }
            else
            {
                return Content("3");
            }
        }
        /// <summary>
        /// 关闭页面更新状态为0
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public bool upstatu(string userName)
        {
            string sql =string.Format("update users set statu=0 where userID='{0}'",userName);
            return DBHelper.Execute(sql);
        }

该部分功能是模拟用户单例登陆,,登陆时给个状态去限制,也做了时间判断避免由于不可控原因导致状态修改失败,时间判断出就是根据当前时间和上次登陆时间去在本次登陆判断状态是否修改,,后面一个更新方法我是放在了退出和关闭页面事件里调用

    window.onbeforeunload = function (e) {
        //更改用户登录状态
        $.ajax({
            type: "post",
            url: "/Home/upstatu",
            data: { 'userName': $(".adminName").text() },
            success: function (data) {

            }
        });
    }; 

这部分代码在此处没啥用,从网上荡的数据格式转换

List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
                foreach (DataRow dr in dt.Rows)//每一行信息,新建一个Dictionary<string,object>,将该行的每列信息加入到字典
                {
                    Dictionary<string, object> result = new Dictionary<string, object>();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        result.Add(dc.ColumnName, dr[dc].ToString());
                    }
                    list.Add(result);
                }

js使用的是layui框架

//登录按钮
    form.on("submit(login)", function(data) {
        //$(this).text("登录中...").attr("disabled", "disabled").addClass("layui-disabled");
        //setTimeout(function() {
        //    var index = layer.msg('登录中,请稍候', {
        //        icon: 16,
        //        time: false,
        //        shade: 0.8
        //    });
            
        //}, 1000);
        var userName = data.field.userName;
        var password = data.field.password;
        $.ajax({
            url: "/Home/Login",
            type: "post",
            data: { 'userName': userName, 'password': password },
            success: function (data) {
                console.info(data)
                if (data ==="1") {
                    window.location.href = "../../index.html";
                } else if (data==="2") {
                    layer.msg('账号已在其他地方登陆!', { icon: 5, time: 2000, anim: 6 });
                } else {
                    layer.msg('账号或密码不正确!', { icon: 5, time: 2000, anim: 6 });
                } 
                layer.closeAll('loading');
            }
        });
        return false;
    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值