开发工具与关键技术:Visual Studio、MVC
作者:幻奏
撰写时间:2019.05.27
上次我把如何登录的代码给写了,却没有写如何记住登录的账号密码,所以现在我就简单的写一下是如何记住账号密码的。
如果我们没写记住密码的话,那每登录一次就要重新输入一遍,太麻烦了。所以我们还是把记住密码写上去方便一些。写记住密码也是挺简单的,就是判断是否把记住密码打钩了,然后把账号和密码存储到session中,然后登录的时把它回填回去,账号的存储时间是根据cookie来判断的。
首先我们在控制器那里把用户登录的方法给写了,然后在判断查询出登录的账号、密码和数据库的账号、密码一样时,我们就要把查询出的用户账号信息放到session里面去。
public ActionResult UserLogin(S_User pwUser){string strMsg = "fail";//定义一个记录状态的变量// 获取页面传递的变量string strUserNumber = pwUser.UserNumber;//用户名string strPassword = pwUser.Password; //密码string strIsRember = Request["rememberMe"];//记住否 try{S_User dbUser = (from tbUser in myModel.S_Userwhere tbUser.UserNumber == strUserNumber && tbUser.ToVoidNo == trueselect tbUser).Single();结果只能有一条数据,0条或者大于等于2条都会出现异常if (strPassword == dbUser.Password){//把用户数据放到session中//设置sessionSession["UserID"] = dbUser.UserID;// 传递 UserIDSession["ServerTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//登录时间
然后判断用户是否勾选了记住密码,是就保存到cookie里面去,不是就把它删除掉。
//记住用户信息 使用cookieif (strIsRember != null && strIsRember.Trim() == "true"){//记住密码 保存cookieHttpCookie cookie = new HttpCookie("user");cookie.Expires = DateTime.Now.AddDays(7);cookie["UserNumber"] = strUserNumber;//用户名cookie["Password"] = strPassword;//密码Response.Cookies.Add(cookie);}else{//忘记HttpCookie cookie = new HttpCookie("user");cookie.Expires = DateTime.Now.AddDays(-1);//有效期设置为昨天,浏览器会自动删除cookieResponse.Cookies.Add(cookie);}
这里我们把cookie的有效期设置为昨天,浏览器会自动删除cookie的。
用户登录的方法写完后,我们就要在登录的控制器那里写回填的方法了。
首先我们要声明几个变量,然后账号和密码赋值为空,记住否的单选框我们给它false。
public ActionResult Login(){string UserNumber = "";string Password = "";bool isRember = false;
下面就是请求并获取cookie。
//获取cookieHttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies["user"];
当cookie不为空的时候,获取它的账号和密码。
if (cookie != null){if (cookie["UserNumber"] != null){UserNumber = System.Web.HttpContext.Current.Server.UrlDecode(cookie["UserNumber"]);}if (cookie["Password"] != null){Password = System.Web.HttpContext.Current.Server.UrlDecode(cookie["Password"]);}isRember = true;}
最后把数据返回到页面
//把数据传递到页面ViewBag.UserNumber = UserNumber;ViewBag.Password = Password;ViewBag.isRember = isRember;return View();}
再到页面的input里接收下账号和密码。
<div class="form-group form-row"><label class="sr-only" for="UserNumber">用户名</label><div class="col-12"><div class="input-group"><div class="input-group-prepend"><div class="input-group-text"><i class="fas fa-fw fa-user"></i></div></div><input type="text" name="UserNumber" id="UserNumber" class="form-control" placeholder="用户名" value="@ViewBag.UserNumber"/></div></div></div><div class="form-group form-row"><label class="sr-only" for="password">密码</label><div class="col-12"><div class="input-group"><div class="input-group-append"><div class="input-group-text"><i class="fas fa-fw fa-unlock"></i></div></div><input type="password" name="password" id="password" class="form-control" placeholder="密码" value="@ViewBag.Password"/></div></div></div><div class="form-group form-row"><div class="col-12"><div class="custom-control custom-checkbox"><input type="checkbox" class="custom-control-input" name="rememberMe" id="rememberMe" value="true" @(ViewBag.isRember ? "checked" : "") /><label class="custom-control-label" for="rememberMe">记住我<span style="color: red">(请不要在公用电脑上使用!)</span></label></div></div></div>
这样子记住密码就写完了,别人登录账号的时候也可以更加方便了