js实现登录时记住密码的方法分析

js实现登录时记住密码的方法分析

在许多网站的登录页面中,都提供了“记住密码”的功能,用户在勾选该选项后,下次登录时可以自动填充用户名和密码,方便了用户的登录操作。本文将介绍如何使用js实现这一功能,涉及到cookie和localStorage两种方法。

1. 使用cookie实现记住密码功能

1.1 设置cookie

在用户登录成功后,可以使用js将用户名和密码以cookie的形式保存在浏览器中,代码如下:

function rememberMe(username, password) {
  let expires = new Date();
  // 设置cookie的过期时间为7天后
  expires.setTime(expires.getTime() + 7 * 24 * 60 * 60 * 1000);
  // 将用户名和密码使用分号隔开,拼接成一个字符串
  let loginInfo = `${username};${password}`;
  // 将字符串保存到cookie中
  document.cookie = `loginInfo=${loginInfo};expires=${expires.toGMTString()}`;
}
  • expires 是设置 cookie 的过期时间,通过 setTime() 方法设置为当前时间 + 7 天后的时间;
  • loginInfo 是将用户名和密码使用分号隔开拼接成的字符串,便于在下次登录时解析;
  • document.cookie 是将字符串保存到 cookie 中,其中 expires 是通过 toGMTString() 方法将过期时间转化为 GMT 格式;

1.2 获取cookie

在下次访问登录页面时,可以使用js从浏览器中获取保存的用户名和密码,代码如下:

function getLoginInfo() {
  let cookie = document.cookie;
  let cookies = cookie.split("; ");
  let loginInfo = "";
  for (let i = 0; i < cookies.length; i++) {
    let arr = cookies[i].split("=");
    if (arr[0] === "loginInfo") {
      loginInfo = arr[1];
      break;
    }
  }
  if (loginInfo !== "") {
    let userInfo = loginInfo.split(";");
    // 返回用户名和密码组成的对象
    return { username: userInfo[0], password: userInfo[1] };
  } else {
    return null;
  }
}
  • document.cookie 是从浏览器中获取保存的cookie;
  • cookie.split("; ") 是将cookie字符串按照分号空格分割成数组;
  • loginInfo 是用来保存当前登录用户的用户名和密码;
  • userInfo 是将用户名和密码从字符串中分离出来,组成一个包含两个属性的对象;

1.3 示例说明

下面以一个简单的登录页面为例,演示如何使用cookie实现记住密码功能。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录</title>
</head>
<body>
  <form action="login.php" method="post">
    <input type="text" name="username" placeholder="请输入用户名"><br>
    <input type="password" name="password" placeholder="请输入密码"><br>
    <input type="checkbox" name="remember" value="1">记住密码<br>
    <input type="submit" value="登录">
  </form>
  <script>
    window.onload = function() {
      let loginInfo = getLoginInfo();
      if (loginInfo !== null) {
        let usernameInput = document.getElementsByName("username")[0];
        let passwordInput = document.getElementsByName("password")[0];
        let rememberInput = document.getElementsByName("remember")[0];
        usernameInput.value = loginInfo.username;
        passwordInput.value = loginInfo.password;
        rememberInput.checked = true;
      }
    }

    function rememberMe(username, password) {
      let expires = new Date();
      expires.setTime(expires.getTime() + 7 * 24 * 60 * 60 * 1000);
      let loginInfo = `${username};${password}`;
      document.cookie = `loginInfo=${loginInfo};expires=${expires.toGMTString()}`;
    }

    function getLoginInfo() {
      let cookie = document.cookie;
      let cookies = cookie.split("; ");
      let loginInfo = "";
      for (let i = 0; i < cookies.length; i++) {
        let arr = cookies[i].split("=");
        if (arr[0] === "loginInfo") {
          loginInfo = arr[1];
          break;
        }
      }
      if (loginInfo !== "") {
        let userInfo = loginInfo.split(";");
        return { username: userInfo[0], password: userInfo[1] };
      } else {
        return null;
      }
    }

    let form = document.getElementsByTagName("form")[0];
    form.onsubmit = function(event) {
      let usernameInput = document.getElementsByName("username")[0];
      let passwordInput = document.getElementsByName("password")[0];
      let rememberInput = document.getElementsByName("remember")[0];
      if (rememberInput.checked) {
        rememberMe(usernameInput.value, passwordInput.value);
      } else {
        let expires = new Date(0);
        document.cookie = `loginInfo=;expires=${expires.toGMTString()}`;
      }
    }  
  </script>
</body>
</html>

该页面包含了一个form表单,其中有用户名、密码和“记住密码”的复选框。在表单提交时,会根据复选框的状态使用rememberMe()函数设置或清除cookie,用户下一次打开页面时,用户名和密码会自动填充,同时复选框也会被选上。使用getLoginInfo()函数从cookie中获取用户名和密码,然后将用户名和密码填入表单中即可。

2. 使用localStorage实现记住密码功能

2.1 设置localStorage

除了使用cookie之外,localStorage也是保存数据的一种常用方式。localStorage和cookie的不同之处在于,localStorage保存的数据不会随着浏览器请求发送到服务器端,因此更加安全。那么如何使用localStorage保存用户名和密码呢?代码如下:

function rememberMe(username, password) {
  let userinfo = {username: username, password: password};
  // 将用户信息转换为JSON格式
  let userinfo_str = JSON.stringify(userinfo);
  // 将JSON字符串保存到localStorage中
  localStorage.setItem('userinfo', userinfo_str);
}
  • 我们将用户名和密码作为一个对象,通过 JSON.stringify() 方法将其转换为字符串;
  • 使用 localStorage.setItem() 方法将字符串保存到localStorage中,key的值为“userinfo”;

2.2 获取localStorage

在用户下次访问登录页面时,可以使用js从localStorage中获取保存的用户名和密码,代码如下:

function getLoginInfoFromStorage() {
  // 从localStorage中获取保存的用户信息
  let userinfo_str = localStorage.getItem("userinfo");
  if (userinfo_str) {
    // 将JSON字符串转换为对象
    let userinfo = JSON.parse(userinfo_str);
    // 返回用户名和密码组成的对象
    return { username: userinfo.username, password: userinfo.password };
  }
  return null;
}
  • 使用 localStorage.getItem() 方法从localStorage中获取保存的用户信息;
  • 如果有保存的信息,则使用 JSON.parse() 方法将字符串转换为对象;
  • 将用户名和密码返回;

2.3 示例说明

下面以一个示例页面为例,演示如何使用localStorage实现记住密码功能。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录</title>
</head>
<body>
  <form action="login.php" method="post">
    <input type="text" name="username" placeholder="请输入用户名"><br>
    <input type="password" name="password" placeholder="请输入密码"><br>
    <input type="checkbox" name="remember" value="1">记住密码<br>
    <input type="submit" value="登录">
  </form>

  <script>
    window.onload = function() {
      let loginInfo = getLoginInfoFromStorage();
      if (loginInfo !== null) {
        let usernameInput = document.getElementsByName("username")[0];
        let passwordInput = document.getElementsByName("password")[0];
        let rememberInput = document.getElementsByName("remember")[0];
        usernameInput.value = loginInfo.username;
        passwordInput.value = loginInfo.password;
        rememberInput.checked = true;
      }
    }

    function rememberMe(username, password) {
      let userinfo = {username: username, password: password};
      let userinfo_str = JSON.stringify(userinfo);
      localStorage.setItem('userinfo', userinfo_str);
    }

    function getLoginInfoFromStorage() {
      let userinfo_str = localStorage.getItem("userinfo");
      if (userinfo_str) {
        let userinfo = JSON.parse(userinfo_str);
        return { username: userinfo.username, password: userinfo.password };
      }
      return null;
    }

    let form = document.getElementsByTagName("form")[0];
    form.onsubmit = function(event) {
      let usernameInput = document.getElementsByName("username")[0];
      let passwordInput = document.getElementsByName("password")[0];
      let rememberInput = document.getElementsByName("remember")[0];
      if (rememberInput.checked) {
        rememberMe(usernameInput.value, passwordInput.value);
      } else {
        localStorage.removeItem("userinfo");
      }
    } 
  </script>
</body>
</html>

该页面与之前的例子类似,但现在我们使用localStorage保存用户信息。使用 localStorage.getItem() 方法从localStorage中获取保存的信息。可以通过 JSON.parse() 方法将字符串转化为对象,然后将用户名和密码填入表单中即可。在表单提交时同样使用记住密码和清除信息两种操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现登录时记住密码的方法分析 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location

    当使用Vue-Router来进行页面导航时,有时会遇到“NavigationDuplicated: Avoided redundant navigation to current location”报错。这个错误提示很明确,表示重复导航到了当前的页面地址。 这种错误通常是因为两次相同的路由导航发生在短时间内,例如用户快速点击同一个路由链接或使用了类似于Vue…

    JavaScript 2023年6月11日
    00
  • JavaScript中捕获与冒泡详解及实例

    下面给出详细讲解JavaScript中捕获与冒泡的攻略。 什么是事件冒泡和捕获 事件冒泡和捕获是JS中处理事件的两种机制。 当一个元素上发生了事件时,如果该元素定义了事件处理函数,那么这个事件会先按照捕获的顺序从父元素一直传递到子元素,再由子元素向上冒泡直到父元素。 事件冒泡 当一个元素上发生事件时,它会把这个事件交给它的父元素处理,父元素再把这个事件交给自…

    JavaScript 2023年6月11日
    00
  • WinForm 自动完成控件实例代码简析

    让我们详细讲解一下“WinForm 自动完成控件实例代码简析”的完整攻略。 1. 简要介绍 WinForm 自动完成控件 WinForm 自动完成控件是用于在用户输入时自动搜索提供的可用选项并在下拉列表中显示可选项的控件。这个控件一般用在输入框中,主要用于实现输入提示和搜索功能。 下面我们来介绍如何在 WinForm 中使用自动完成控件。 2. 引入自动完成…

    JavaScript 2023年5月28日
    00
  • javascript 日期时间 转换的方法

    当需要对 JavaScript 中的日期时间格式进行转换时,我们可以使用以下方法: 获取当前时间 使用以下方法可以获取到当前时间: const now = new Date(); 其中,now就是获取到的当前时间,它的格式是日期对象。可以通过该对象的方法来对时间进行处理。 时间戳转化为日期时间格式 时间戳指的是从1970年1月1日00:00:00开始所经过的…

    JavaScript 2023年5月27日
    00
  • JavaScript中清空数组的几种方法

    JavaScript中清空数组的几种方法 在JavaScript开发中,清空数组是一个常见的操作。本文将为大家介绍几种清空数组的方法。 使用length属性 JavaScript中的数组可以使用length属性获取数组长度,也可以通过修改length属性来清空数组。 let arr = [1, 2, 3]; arr.length = 0; console.l…

    JavaScript 2023年5月27日
    00
  • JavaScript面向对象程序设计教程

    JavaScript面向对象程序设计教程攻略 什么是面向对象? 面向对象是一种编程范式,它将数据和行为组织在一起,描述真实世界中的事物,并允许程序员定义这些事物的相关操作。在JavaScript中,面向对象编程可以通过对象的创建来实现。 JavaScript中的面向对象 JavaScript是一种基于原型的面向对象语言。它通过原型链来实现继承和数据共享,这种…

    JavaScript 2023年5月27日
    00
  • JavaScript版DateAdd和DateDiff函数代码

    下面是详细讲解“JavaScript版DateAdd和DateDiff函数代码”的完整攻略: 一、概述 在Web开发中,常常需要对日期进行操作。但是JavaScript原生的Date对象提供的方法较少,因此我们可以自己编写DateAdd和DateDiff函数来方便地进行日期计算。 DateAdd函数用于计算某个日期加上一定时间单位后的日期值,而DateDif…

    JavaScript 2023年5月27日
    00
  • 使用script的src实现跨域和类似ajax效果

    使用script的src属性实现跨域和类似ajax效果,是一种常见的解决网页数据获取和展示的方式。下面就具体讲解如何实现。 利用script的src属性解决跨域问题 当在网页中使用script的src属性加载跨域资源时,会受到同源策略的限制,无法直接获取资源。但我们可以通过一些技巧来绕过同源策略的限制,从而实现跨域。 JSONP JSONP是一种常用的跨域解…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部