ASP.NET MVC 实现记住密码功能

简述

          “记住密码”功能是一种在现代应用程序和网站中常见的便利性特性,它允许用户在经过一次身份验证后,无需每次访问都重新输入用户名和密码。在登录界面时常常需要“记住密码功能”

代码

        下面的代码是登录的post方法,获取前端提交的MAil、Password和Remember。当登录验证通过后执行判断Remember,也就是判断用户是否勾选记住密码,假设Remember==true就会执行记住密码功能,在这里我将用户的邮箱和密码与用户IP绑定并且保存到Cookie中(我获取IP是为了确保用户数据独立),同时设置过期时间为7天(这样做的安全性不高,在条件允许的情况下,生成一个专属的Cookie值保存到数据库中,再根据Cookie执行查询操作)

  public ActionResult Login(string Mail, string password, bool remember)
  {
      if (LogOrSing.Login(Mail, password)) // 验证用户名和密码的逻辑
      {
          if (remember)
          {
              // 将用户名和密码保存到Cookie中
              Response.Cookies["IP-Mail-Pwd"].Value =
                  IP.GetLocalIPAddress() + "-" + Mail + "-" + password;
              Response.Cookies["remember"].Value = "true";
              Response.Cookies["IP-Mail-Pwd"].Expires = DateTime.Now.AddDays(7);
              Response.Cookies["remember"].Expires = DateTime.Now.AddDays(7); // 设置Cookie的过期时间为7天
              return Content("用户名:" + Mail + "密码:" + password + "记住我" + remember);
          }
          else
          {
              return Content("用户名:" + Mail + "密码:" + password + "记住我" + remember);
          }
          // 登录成功后的操作,例如打开主窗口等
      }
      else
      {
          return Content("用户名:" + Mail + "密码:" + password + "记住我" + remember);
      }
  }

       以下是获取IP的方法,引用命名空间System.Net。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;

namespace OptiMfg.Models
{
    public class IP
    {
        public static string GetLocalIPAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            return "127.0.0.1";
        }

    }
}

 这里就是登录的get方法,先判断是否存在Cookie,存在就获取Cookie存储的IP,如果Ip与重新获取的Ip相同就获取邮箱和密码并且保存到Employ对象中并且将 Employee 对象作为模型传递给视图。如果没有Cookie和IP不同则返回空的视图。

 // 如果Cookie存在,则从Cookie中获取用户名和密码
 if (Request.Cookies["IP-Mail-pwd"] != null)
 {
     // 如果Cookie存在,则从Cookie中获取用户名和密码
     string[] values = Request.Cookies["IP-Mail-pwd"].Value.Split('-');
     string ip = values[0];

     if (IP.GetLocalIPAddress() == ip)
     {
         string Mail = values[1];
         string password = values[2];
         ViewBag.BOOL = true;
         Employee employee = new Employee { Mail = Mail, Password = password };
         return View(employee);
     }
     else
     {
         ViewBag.BOOL = false;
         return View();
     }
 }
 else
 {
     ViewBag.BOOL = false;
     return View();
 }

 前端代码,这里要注意的是TextBox和Password的ID要与post方法接收的ID要相同,同时必须要进行判断,不然当控制器传递空的视图时必定报错

<div class="www" id="ws">
    <a>邮箱</a>
    <br />
    @if (ViewBag.BOOL)
    {
        @Html.TextBox("Mail", Model.Mail, new { style = "margin-left:10px; width: 95%; margin-right: 20px;border: none;" })
    }
    else
    {
        @Html.TextBox("Mail", "", new { style = "margin-left:10px; width: 95%; margin-right: 20px;border: none;" })
    }

</div>
<div class="www" id="wss">
    <a> 密码</a>
    <br />
    @if (ViewBag.BOOL)
    {
        @Html.Password("Password", Model.Password, new { style = "margin-left:10px; width: 95%; margin-right: 20px;border: none;" })
    }
    else
    {
        @Html.Password("Password", "", new { style = "margin-left:10px; width: 95%; margin-right: 20px;border: none;" })

    }
</div>

以下是清除Cookie的代码,简单来讲就是将Cookie的过期时间改成已经过期的时间。 

 HttpCookie hc = Request.Cookies["user"];
 hc.Expires = DateTime.Now.AddDays(-1);
 Response.AppendCookie(hc);

最后,这些代码部分来自网上,本人也接触C#不久,如有不足欢迎大佬指正或者是有更好的方式也欢迎大佬提出。 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值