黑马程序员_三层架构之用户登陆(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;
}
}
}
- 黑马程序员_三层架构之用户登陆(BS架构)
- 黑马程序员_浅谈三层架构
- 黑马程序员-三层架构
- 【黑马程序员】三层架构(学习笔记)
- 黑马程序员---理解三层架构
- 黑马程序员-三层架构介绍
- 三层架构下实现用户登陆C#
- 黑马程序员---Visual Studio建立三层架构
- 三层架构之系统登陆实例
- 三层架构登陆
- 三层架构登陆实例
- 【三层架构】登陆实例
- 黑马程序员_精简三层架构DAL(初步认识DAL,Model,DBNull.Value的作用)
- 黑马程序员_精简三层架构DAL(构建两层架构(DAL,UI),密码MD5处理,“MD5加盐”,DAL某些方法)
- 逐步深入三层架构(三)-三层登陆源码分享
- C#三层架构登陆实例
- C#三层架构登陆实例
- C#三层架构登陆实例
- Javascript --扩展String实现替换字符串中index处字符
- 《胭粉计》
- 使用eclipse自动生成build.xml文件
- hdu2196
- WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现
- 黑马程序员_三层架构之用户登陆(BS架构)
- ZOJ-1038
- Brackets Sequence - POJ 1141 dp
- 高斯分布
- JavaScript获取select下拉框中的第一个值
- STL multiset 学习(NYOJ-55 懒省事的小明)
- 《梅妃》
- Action访问Servlet API
- 吐槽HDOJ 1002