黑马程序员_三层架构之用户登陆(BS架构)

来源:互联网 发布:日本文化教育网络视频 编辑:程序博客网 时间:2024/04/28 19:08

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

web前端javascript脚本,异步请求。向后台ashx页面提供用户名、密码等参数,经ashx处理后然后返回data值

            $.post("/ashx/userlogin.ashx", { "loginId": loginId, "password": password, "isRemember": rememberState, "url": getParam("url") }, function (data) {
                if (data == "001") {
                    window.location = "/index.aspx";
                    return;
                }
                if (data.substring(0, 3) == "002") {
                    window.location = data.substring(3);
                }
                else {
                    alert(data);
                    $("#txtPassword").val("");
                }

            });


后台userlogin.ashx代码

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";


            string loginId = context.Request.Form["loginId"]; //获取用户名
            string password = context.Request.Form["password"];//获取用户密码
            string cbState = context.Request.Form["isRemember"];//是否勾选了记住用户信息,七天内免登陆
            string url = context.Request.Form["url"];


            BLL.TUsers bll = new BLL.TUsers();
            Model.TUsers model = null;
            string msg = string.Empty;


            bool b = bll.CheckLogin(loginId, password, out msg, out model);//检查用户提交上来的数据是否与数据库中的用户信息匹配
            if (b)
            {
                context.Session["UserName"] = model;//将用户信息存在session中
                if (cbState == "true")
                {
                    //用户名,密码存储在cookie中
                    HttpCookie name = new HttpCookie("lc1", model.LoginId);
                    HttpCookie pwd = new HttpCookie("lc2", CommonHelper.CommonMethod.Encrypt(model.LoginPwd));
                    name.Expires.AddDays(7);
                    pwd.Expires.AddDays(7);
                    context.Response.Cookies.Add(name);
                    context.Response.Cookies.Add(pwd);
                }
                if (!string.IsNullOrEmpty(url))
                {
                    //将参数中所带的url页面返回(url为登录成功后将跳转到的页面)
                    context.Response.Write("002" + url);
                }
                else
                {
                    //登录成功
                    context.Response.Write("001");
                }
            }
            else
            {
                //登录失败
                context.Response.Write(msg);
            }
        }

业务逻辑层BLL(Business Logic Layer)

  /// <summary>
        /// 检查登录
        /// </summary>
        /// <param name="loginId">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="msg">返回信息</param>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool CheckLogin(string loginId, string password, out string msg, out Model.TUsers model)
        {
            model = dal.GetModel(loginId);//调用数据访问层中的GetModel方法
            if (model != null)
            {
                if (model.UserState.Id == 1 || model.UserState.Id == 2)
                {
                    string key = model.LoginPwd.Substring(0, 2);
                    //数据库中存的密码值 sqlPsw
                    string sqlPsw = Encrypt(password, key).Substring(0, 10);
                    if (model.LoginPwd == sqlPsw)
                    {
                        msg = "登录成功";
                        UpdateLTandLLT(model.Id);
                        return true;
                    }
                    else
                    {
                        msg = "密码错误";
                        return false;
                    }
                }
                else
                {
                    msg = "此用户已被锁定,请联系管理员";
                    return false;
                }
            }
            else
            {
                msg = "此用户不存在!";
                return false;
            }
        }

 

数据访问层(Data Access Layer

 /// <summary>
        /// 根据用户名得到一个对象实体
        /// </summary>
        public shop.Model.TUsers GetModel(string loginId)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select  top 1 * from TUsers ");
            strSql.Append(" where LoginId=@loginId");//带参数的sql语句,防止sql注入漏洞攻击
            SqlParameter[] parameters = {
new SqlParameter("@loginId", SqlDbType.NVarChar,25)
};
            parameters[0].Value = loginId;
            //shop.Model.TUsers model = new shop.Model.TUsers();
            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return DataRowToModel(ds.Tables[0].Rows[0]);
            }
            else
            {
                return null;
            }
        }


DbHelperSQL(访问数据库代码

/// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        da.Fill(ds, "ds");
                        cmd.Parameters.Clear();
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    return ds;
                }
            }
        }

0 0
原创粉丝点击