在这个互联网中有许许多多的网站,各式各样的网络游戏以及林林总总的贴吧什么的,还有一些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";
将结果放返回到页面这个登录的控制器部分完成了