菜鸟笔记—ASP.NET MVC中登录页面登录的本质

在这个互联网中有许许多多的网站,各式各样的网络游戏以及林林总总的贴吧什么的,还有一些APP也需要登录才能使用,一旦涉及到登录总离不开各种账户,比如马老板的QQ、微信,还有一些网站中的自己账户,账户是用来保存用户的信息的,有账户就自然需要密码,不然用户在数据库当中存在的一些隐私信息就容易被盗取,但是密码也是需要加密的,否则安全系数不高,等于没有密码。

密码加密一般用不可逆的哈希算法。常用的有md5(不建议,容易被破解)、sha1、sha256、sha512——引用于https://blog.csdn.net/zyydecsdn/article/details/78455121 CSND的一篇博客;

登录页面的本质是通过控制器将页面输入的账户和密码(进行加密后的)与数据库内的账户和密码(加密的)进行比对,无误后才能登录,在有些账户登录时还需要验证码与用户身份,验证码是一种随机字符编码用来防止自动登录,而用户身份往往是代表着一些权限

登录往往是需验证的,而验证登录的顺序往往是:验证码->用户名->密码->用户身份,我们先从师徒互取数据(建议使用post提交方式);

string strMsg = "failed";
string strUserNuber = Request["UserNuber"];//用户名
string strPassword = Request["Password"];//密码
string strValidCode = Request["ValideCode"];//验证码
string strUserTypeClass = Request["UserTypeClass"];//用户身份 
这是控制器方法

验证码的验证是将保存在session中的验证码转换为字符串保存到变量中,再将生成的验证码和输入的验证码进行不区分大小写的比较,验证码的的图片是如何生成的就留着以后再写。

if (Session["ValideCode"] != null)
{
    string myValideCode = Session["ValideCode"].ToString().Trim();
    if (myValideCode.Equals(strValidCode, StringComparison.CurrentCultureIgnoreCase))
{
}else{
     strMsg = "输入的验证码错误,请重新输入";
}

,验证码无误之后,进行用户名的认证根据页面输入的用户名到数据库查询,返回唯一值则正确,否则错误

try{
    var dbUser = (from tbUser in myModels.PW_User
                  where tbUser.UserNuber ==
                  strUserNuber
                  select new
      {
     tbUser.UserID,tbUser.Password
     }).Single();
}
catch (Exception)
{
  strMsg = "输入的用户名错误,请重新输入";
}

接下来是密码的验证, 数据库中保存的密码是加密之后的密码,因此比较之前需要将输入的密码先进行加密



var myPassword =Common.AESEncryptHelper.Encrypt(strPassword);
if(dbUser.Password.Equals(myPassword.Trim()))
{

    var dbUserType = (from tbUser in myModels.PW_User

                      join tbUserRoleDetail in myModels.PW_UserRoleDetail on tbUser.UserID equals tbUserRoleDetail.UserID
                      join tbUserType in myModels.SYS_UserType on tbUserRoleDetail.UserTypeID equals tbUserType.UserTypeID
                      where tbUser.UserNuber == strUserNuber.Trim() && tbUserType.typeClass == strUserTypeClass.Trim()
                      select new
                      {
                      bUserType.UserTypeID,
                      tbUserType.UserType
                      }).ToList();

else
{
     strMsg = "密码错误,请重新输入";
}
这个AESEncryptHelper是自己封装的一个用于256位AES加密的类

判断返回值是否大于0,大于0则继续进行记住否的类判断和操作

if (dbUserType.Count > 0)
{ 
}
else
{
    strMsg = "选择的用户类型错误,请重新选择";
}

记住否判断和操作,获取当前时间作为当前时间,获取登录用户信息,在main页面显示,用户ID:查询用户姓名,用户类型:确定用户身份,登录时间

string strTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm");
   //获取登录用户信息,在main页面显示
   Session["UserID"] = dbUser.UserID;//用户ID:查询用户姓名
   Session["UserTypeClass"] = strUserTypeClass;//用户类型:确定用户身份
   Session["ServerTime"] = strTime;//登录时间
   strMsg = "success";

将结果放返回到页面这个登录的控制器部分完成了

发布了26 篇原创文章 · 获赞 4 · 访问量 3609

猜你喜欢

转载自blog.csdn.net/weixin_44545673/article/details/89975036