ASP.NET实现记住密码功能

一、思路
根据页面上“记住密码”的复选框是否被选中进行判断,若复选框选中,则将用户名和密码存储在cookies中,下次登陆时直接从cookies中进行获取;若复选框未选中,则直接设置cookies过期。
二、实现
1.前台页面

<input type="checkbox" id="chSavePass" name="chSavePass" />记住密码

2.前台页面上使用ajax向后台传值,根据ajax的url在对应的controller中的方法里存储cookies值

url: '../../Login/Loginsubmit'

Loginsubmit方法中的代码如下:

System.Web.HttpCookie newcookie = new HttpCookie("user");
if (sHidSavePass == "1")//记住密码选项被选中
{
    newcookie.Values["username"] = sUser;
    newcookie.Values["password"] = sPassword;
    newcookie.Expires = DateTime.Now.AddMinutes(1);
    Response.AppendCookie(newcookie);
}
else
{
    newcookie.Values["username"] = "";
    newcookie.Values["password"] = "";
    newcookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(newcookie);
}

3.当用户名和密码存储到cookies中,在controller中的UserLogin和Logout方法中分别对cookies进行获取

[AllowAnonymous]
public ActionResult UserLogin(string returnUrl = "")
{
     FormsAuthentication.SignOut();
     Session.RemoveAll();
     //若链接地址不是"/Login/Logout",表示页面上其他链接
     if (returnUrl != "/Login/Logout")
     {
    HttpCookie myCookie = Request.Cookies["user"];
    //若cookies的值不为空
    if (myCookie != null && myCookie.Values["username"] !=""&&    myCookie.Values["password"] != "")
    {
         //若cookies未过期
         if (DateTime.Now.CompareTo(Convert.ToDateTime(myCookie.Expires)) > 0)
         {
               //取出Cookie中的值,赋值给前台的对应input文本框的value属性
               ViewBag.name = Request.Cookies["user"]["username"].ToString();
               ViewBag.pass = Request.Cookies["user"]["password"].ToString();
         }
         //若cookies过期
         else
         {
               ViewBag.name = "";//前台文本框不显示值
               ViewBag.pass = "";
               Request.Cookies.Remove("user");//删除cookies
         }
      }
      //若cookies的值是空的
      else
      {
               ViewBag.name = "";
               ViewBag.pass = "";
               //myCookie.Expires = DateTime.Now.AddYears(-1);
               //Response.Cookies.Add(myCookie);
               Request.Cookies.Remove("user");
      }
      ViewBag.ReturnUrl = returnUrl;
    }
    //若链接地址是"/Login/Logout",即按“退出”按钮
    else
    {
        ViewBag.name = "";
        ViewBag.pass = "";
        //myCookie.Expires = DateTime.Now.AddYears(-1);
        //Response.Cookies.Add(myCookie);
        Request.Cookies.Remove("user");
    }
        return View();
    }

(Logout方法中的获取cookies代码相似,需注意逻辑顺序)
4.前台页面上使用ViewBag获取后台的cookies的值

<input class="itxt" name="account" id="account" size="23" placeholder="请输入用户名" value="@ViewBag.name">
<input type="password" name="password" id="password" size="23" placeholder="请输入密码"  class="itxt itxt-error" value="@ViewBag.pass"  />

5.后台判断前台的复选框是否被选中
(1)在前台页面上添加一个隐藏的input文本框,这里的value值随便取

<input type="hidden" name="hidSavePass" id="hidSavePass" value="222222" />

(2)在前台的“登陆”按钮的click事件中添加代码

if ($("input[type='checkbox']").is(':checked') == true) {
      $("#hidSavePass").val("1");
}

(3)前台的ajax的data中向controller对应的方法传参

sHidSavePass: $("#hidSavePass").val(),

(4)在后台controller的Loginsubmit方法中添加局部变量string sHidSavePass【注意:这边的变量名是和ajax中的data中相同】;添加复选框选中判断

if (sHidSavePass == "1")//记住密码选项被选中

6.前台在页面加载时获取后台的cookies中的值,若cookies中的不为空,则需要将复选框的属性设置为“被选中”

if ($("#account").val() != "" && $("#password").val() != "") 
{
    $("input[type='checkbox']").attr("checked", "checked");      
 }

三、总结
1.实现复选框选中时,可以设置一个隐藏的input文本框。在前台判断是否被选中,若被选中,则设置input的value值;通过Jquery获取input的val赋给ajax的data传递给后台,由后台进行判断值是否相等
2.在前台判断是否文本框被选中则设置值的相关代码,是在“登陆”按钮被触发的情况下,而不是页面加载时
3.注意null和空字符的问题,以上代码都是判断是否为“ ”,而不是null
四、相关链接
1.ASP.NET Cookies简单应用 记住用户名和密码
http://www.cnblogs.com/allen0118/archive/2012/07/10/2585089.html
2.ASP.NET Cookie 概述
https://msdn.microsoft.com/zh-cn/library/ms178194(v=VS.80).aspx

展开阅读全文

没有更多推荐了,返回首页