JavaScript 利用Cookie记录用户登录信息

下面是详细讲解“JavaScript 利用Cookie记录用户登录信息”的完整攻略:

什么是Cookie

Cookie即“小甜饼”,是浏览器存储在客户端(电脑客户端、手机客户端等)中的一小段文本,在HTTP请求和响应中被发送和接收。Cookie能够跟踪用户的活动并在用户重访时保存有关用户的信息。Cookie可以使用JavaScript进行控制。

利用Cookie记录用户登录信息的步骤

  1. 在用户登录过程中,在后端服务器中(如PHP)将用户ID和密码组成一个字符串,并使用加密算法对其进行加密。
  2. 将加密后的字符串存储为一个Cookie并发送给客户端。
  3. 用户浏览器接收到这个Cookie并存储在其中,当用户请求网站的其他页面时,浏览器将根据设置的Cookie发送给服务器。
  4. 后端服务器将会校验Cookie的有效性,如果Cookie有效就代表用户已经登录。

源代码:

登录页面html代码

  <form>
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username"><br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password"><br>
    <button type="button" onclick="check()">登录</button>
  </form>

登录页面JavaScript代码

function check() {
  // 获取用户名和密码输入框的值
  let username = document.getElementById("username").value;
  let password = document.getElementById("password").value;

  // 判断输入是否为空
  if (!username) {
    alert("请输入用户名!");
    return;
  }
  if (!password) {
    alert("请输入密码!");
    return;
  }

  // 加签名
  let sign = btoa(username + "|" + password);
  let cookieText = `user=${sign}`;

  // 设置Cookie
  let expires = new Date(Date.now() + 7 * 24 * 3600 * 1000).toGMTString();
  document.cookie = `${cookieText}; expires=${expires}`;

  alert("登录成功!");
}

其他页面JavaScript代码

function checkLogin() {
  // 获取Cookie
  let regStr = "(^| )user=([^;]*)(;|\x24)";
  let reg = new RegExp(regStr);
  let result = reg.exec(document.cookie);
  if (result) {
    let sign = result[2];
    let data = atob(sign).split("|");
    let username = data[0];
    let password = data[1];

    // 发送Ajax请求到后端验证身份
    $.ajax({
      url: "/check_login.php",
      data: {
        username: username,
        password: password,
      },
      type: "post",
      dataType: "json",
      success: function (data) {
        if (data.success) {
          alert("已经登录!");
          // do something
        } else {
          alert("请先登录!");
          // do something
        }
      },
    });
  } else {
    alert("请先登录!");
    // do something
  }
}

示例说明

示例1:记录用户选择的主题

在网站中,用户可以选择不同的主题,比如深色主题、浅色主题等,这些主题与用户的当次访问有关。如果用户再次访问网站时,希望网站显示上一次选择的主题。利用Cookie记录用户选择的主题可以实现这个需求。

实现步骤:

  1. 在用户选择主题时,将主题名称或其它标识作为Cookie的值存储在客户端。
  2. 当用户再次访问网站时,自动从Cookie值中读取用户上次选择的主题,并应用到网站页面中。

JavaScript代码示例:

// 定义函数,用于设置Cookie的值
function setCookie(cname, cvalue, exdays) {
  let d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  let expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

// 定义函数,用于获取Cookie的值
function getCookie(cname) {
  let name = cname + "=";
  let ca = document.cookie.split(';');
  for(let i = 0; i < ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

// 获取用户选择的主题,此处以radio按钮为例
document.getElementById("themeRadio").addEventListener("click", function() {
  let theme = document.querySelector('input[name="theme"]:checked').value;
  setCookie("theme", theme, 7);
});

// 页面加载时自动应用上次选择的主题
window.onload = function() {
  let cookieTheme = getCookie("theme");
  if (cookieTheme) {
    document.getElementById(cookieTheme).checked = true;
    // 应用主题,需要根据具体情况调用不同的方法或API
    applyTheme(cookieTheme);
  }
}

示例2:记住用户的输入信息

在网站中,用户可能需要填写一些表单信息,比如注册、留言等。如果用户在访问该网站时,希望能够保存上次填写的表单数据,可以使用Cookie来记录用户输入信息。

实现步骤:

  1. 监听表单输入事件,当用户输入时,将数据保存到Cookie中。
  2. 当用户再次访问该网站时,自动从Cookie中读取用户上次填写的表单数据,并自动填充到表单中。

JavaScript代码示例:

// 定义函数,用于设置Cookie的值
function setCookie(cname, cvalue, exdays) {
  let d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  let expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

// 定义函数,用于获取Cookie的值
function getCookie(cname) {
  let name = cname + "=";
  let ca = document.cookie.split(';');
  for(let i = 0; i < ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

// 监听表单输入事件
document.querySelector("#myForm").addEventListener("input", function() {
  let formData = JSON.stringify(serialize(this));
  setCookie("formData", formData, 7);
});

// 页面加载时自动填充上次保存的表单数据
window.onload = function() {
  let cookieFormData = getCookie("formData");
  if (cookieFormData) {
    let formDataObj = JSON.parse(cookieFormData);
    let inputElems = document.querySelectorAll("#myForm input");
    for (let i = 0; i < inputElems.length; i++) {
      let inputElem = inputElems[i];
      if (formDataObj[inputElem.name]) {
        inputElem.value = formDataObj[inputElem.name];
      }
    }
  }
}

// 序列化表单数据
function serialize(form) {
  if (!form || form.nodeName !== "FORM") {
    return;
  }

  let i, j, obj = {};
  for (i = form.elements.length - 1; i >= 0; i = i - 1) {
    if (form.elements[i].name === "") {
      continue;
    }
    switch (form.elements[i].nodeName) {
      case 'INPUT':
        switch (form.elements[i].type) {
          case 'text':
          case 'hidden':
          case 'password':
          case 'button':
          case 'reset':
          case 'submit':
            obj[form.elements[i].name] = form.elements[i].value;
            break;
          case 'checkbox':
          case 'radio':
            if (form.elements[i].checked) {
              obj[form.elements[i].name] = form.elements[i].value;
            }
            break;
          case 'file':
            break;
        }
        break;
      case 'TEXTAREA':
        obj[form.elements[i].name] = form.elements[i].value;
        break;
      case 'SELECT':
        switch (form.elements[i].type) {
          case 'select-one':
            obj[form.elements[i].name] = form.elements[i].value;
            break;
          case 'select-multiple':
            for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {
              if (form.elements[i].options[j].selected) {
                obj[form.elements[i].name] = form.elements[i].options[j].value;
              }
            }
            break;
        }
        break;
      case 'BUTTON':
        switch (form.elements[i].type) {
          case 'reset':
          case 'submit':
          case 'button':
            obj[form.elements[i].name] = form.elements[i].value;
            break;
        }
        break;
    }
  }
  return obj;
};

以上是JavaScript利用Cookie记录用户登录信息的完整攻略及其两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 利用Cookie记录用户登录信息 - Python技术站

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

相关文章

  • “前端”工匠系列(一):合格的工匠,究竟该搞什么 | 京东云技术团队

    作者:京东零售 刘伟东 此文为系列文章第一篇,为浅尝辄止的引入,目的是为了让前端从业人员及非从业但是对此领域感兴趣的人对于”前端“是干什么的这个话题有个无门槛的了解。 “前端职能是什么” 说起”前端”,维基百科对这个技术角色的定位是“前端(英語:front-end)和后端(英語:back-end)是描述进程开始和结束的通用词汇。 前端作用于采集输入信息,后端…

    JavaScript 2023年5月5日
    00
  • js中apply和call的理解与使用方法

    下面是关于“js中apply和call的理解与使用方法”的完整攻略: 一、概述 在 JavaScript 中,call() 和 apply() 都是 Function 原型对象上的方法,主要用于改变函数运行时的上下文对象(即 this 指向)。 在使用时,两者的区别主要在于传递参数的方式不同。call() 接收的是一个参数列表,而 apply() 接收的是一…

    JavaScript 2023年6月10日
    00
  • JS基于开关思想实现的数组去重功能【案例】

    JS基于开关思想实现的数组去重功能是一种常见的数组去重方法,其原理主要是利用一个开关数组来记录数组中每个元素是否出现过。下面是实现该功能的完整攻略: 1.原理说明 JS基于开关思想实现的数组去重功能采用以下步骤: 1.创建一个空的开关数组,其长度为原数组的长度 2.遍历原始数组,检查每个元素在开关数组中的对应位置是否为真 3.如果为真,则说明该元素已经出现过…

    JavaScript 2023年5月28日
    00
  • js实现简单的网页换肤效果

    下面是关于“js实现简单的网页换肤效果”的完整攻略: 1. 实现思路 网页换肤效果的实现,主要是在页面加载时,用 JavaScript 动态修改 CSS 样式。 首先在页面加载时,向页面中插入一个切换主题样式的按钮或者下拉菜单,当用户点击这个按钮或者下拉菜单时,根据用户选择的样式,动态切换网页的样式。在这个过程中,需要掌握以下几个技能: 如何动态创建 &lt…

    JavaScript 2023年6月11日
    00
  • JavaScript异步编程Promise模式的6个特性

    当我们使用JavaScript编写复杂的应用时,经常会遇到需要进行异步操作的情况,例如异步请求数据或处理大量的计算任务。Promise模式是一种异步编程的解决方案,它对异步操作进行了抽象和封装,并提供了一些特性来更好地处理和管理异步操作。下面是JavaScript Promise模式的6个特性的详细讲解: 1. Promise是一个对象 在JavaScrip…

    JavaScript 2023年5月28日
    00
  • JavaScript架构localStorage特殊场景下二次封装操作

    那么以下是对JavaScript架构localStorage特殊场景下二次封装操作的具体攻略: 什么是localStorage? localStorage 是一种可以在浏览器本地存储数据的 API。它可以通过 key-value 对的形式保存数据,每个 key-value 对都会被浏览器独立存储,并且不受域名和浏览器限制。 为什么需要二次封装操作? loca…

    JavaScript 2023年6月11日
    00
  • 一个简单的JavaScript 日期计算算法

    以下是详细讲解 “一个简单的 JavaScript 日期计算算法”的完整攻略: 概述 本算法是基于 JavaScript 编写的一个用于日期计算的简单算法。它可以根据给定的起始日期和间隔天数,计算出相应的结束日期以及日期间隔中所有的日期。 算法实现 步骤如下: 定义起始日期和间隔天数; 将起始日期转化为时间戳; 计算出结束日期的时间戳,即为起始日期加上间隔天…

    JavaScript 2023年5月27日
    00
  • JS常用加密编码与算法实例总结

    JS常用加密编码与算法实例总结 本文将从加密编码的概念入手,讲解JS中常用的几种加密编码算法及其实现方法,并且举例说明其应用场景。 一、加密编码概念 1.1 加密 加密是将一段明文(原始数据)通过某种算法,转换成一段看上去似乎很乱的密文(加密数据)。加密的过程中需要使用一种密钥来控制算法的变换,这个密钥可以使加密结果或者加密方式不可预测。 1.2 解密 解密…

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