在写这种登录验证判断的时候,逻辑一定要清晰明确,要想好有哪些判断。
判断一:首先判断每个输入框是否输入数据
判断二:账号是否正确,密码是否正确(我觉得这两个判断可以放在一起,也可以分开判断吧,因为遇到过很多的一些登录验证都是把账号和密码放在一起的)
判断三:验证码是否对应(听说验证码的出现是防止非人工填写)
如果还需要其它的判断的话,继续嵌套下去就行了。
以下是示例代码,可供参考
public ActionResult UserLogin(PW_User pwUser)
{
string strMsg = "fail";//定义一个记录状态的变量
//获取页面传递的变量
string strUserNuber = pwUser.UserNuber;//用户名
string strPassword = pwUser.Password; //密码
string strValidCode = Request["validCode"];//验证码
string strIsRember = Request["rememberMe"];//记住我
string strUserTypeClass = Request["UserTypeClass"]; //登录身份(用户类型ID)
if (strUserNuber != "" && strPassword != "" & strValidCode != "" & strIsRember != "" & strUserTypeClass != "")
{
//第一步:验证验证码是否争取
//获取处session存放的验证码
string sessionValiCode = "";
try
{
//图片字符串
sessionValiCode = Session["validCode"].ToString();
}
catch (Exception e)
{
Console.WriteLine(e);//并不会产生输出,主要是为了避免VS提示e未使用的警告
//throw;
}
//判断填入的验证和session中的验证码是否一致(忽略大小写)
if (sessionValiCode.Equals(strValidCode.Trim(), StringComparison.InvariantCultureIgnoreCase))
{
try
{
//第二步、判断账号是否存在(拿页面账号作为条件查询数据库表)
PW_User dbUser = (from tbUser in myEntities.PW_User
where tbUser.UserNuber == strUserNuber && tbUser.ToVoidNo == true
select tbUser).Single();
//第三步:对页面传来的密码进行AES265后进行加密
string password = AESEncryptHelper.Encrypt(strPassword);
if (dbUser.Password == password)
{
//第四步:判断账号和选择的权限跟注册账号的账号权限是否对应
strUserTypeClass = strUserTypeClass.Trim();//去空格
//多表查询--结合sql写法
//用户表 连 用户角色明细表 连 用户类型表
var listUserType = (from tbUser in myEntities.PW_User
join tbUserRoleDetail in myEntities.PW_UserRoleDetail on tbUser.UserID equals tbUserRoleDetail.UserID
join tbUserType in myEntities.SYS_UserType
on tbUserRoleDetail.UserTypeID equals tbUserType.UserTypeID
where tbUserRoleDetail.UserID == dbUser.UserID && tbUserType.typeClass == strUserTypeClass
select new
{
tbUserType.UserTypeID,
tbUserType.UserType
}).ToList();
if (listUserType.Count > 0)
{
//第五步:设置session机制
//用户身份验证完成 开始处理登录信息
//获取用户类型名称
string userTypeName = listUserType[0].UserType.Trim();
//获取用户类型ID
int userTypeId = listUserType[0].UserTypeID;
//设置session
Session["UserID"] = dbUser.UserID; // 传递 UserID
Session["UserTypeID"] = userTypeId;// 传递 UserTypeID
Session["ServerTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ;//登录时间
Session["UserTypeClass"] = strUserTypeClass;//用户的类型 1-学生;2-教师;3-管理
//设置cookie
if (strIsRember == "true")
{
//记住密码 保存cookie
HttpCookie cookie = new HttpCookie("user");
cookie.Expires = DateTime.Now.AddDays(7);//保存7天
cookie["UserNuber"] = strUserNuber;//用户名
cookie["Password"] = strPassword;//密码
cookie["UserTypeClass"] = strUserTypeClass;//用户类型
Response.Cookies.Add(cookie);
}
else
{
//删除 cookie
HttpCookie cookie = new HttpCookie("user");
cookie.Expires = DateTime.Now.AddDays(-1);//通过设置 Cookie 的过期时间为负,强制使 Cookie 过期
Response.Cookies.Add(cookie);
}
strMsg = "success";//登录成功
}
else
{
strMsg = "账号和登录人的角色不匹配!";
}
}
else
{
strMsg = "当前输入的密码错误!";
}
}
catch (Exception)
{
strMsg = "当前输入的账号不存在!";
}
}
else
{
strMsg = "验证码不匹配!";
}
}
else {
strMsg = "请把页面数据填写完整!";
}
//返回
return Json(strMsg, JsonRequestBehavior.AllowGet);
}
代码量其实不多,就是这些判断对于新手来说有一点点难理解吧。