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日

相关文章

  • 适用于javascript开发者的Processing.js入门教程

    适用于JavaScript开发者的Processing.js入门教程 什么是Processing.js Processing.js是一个基于JavaScript语言的绘图库,可以帮助我们使用JavaScript绘制出各种有趣的形状和图案。Processing.js底层是使用Java语言实现的,如果你之前有使用过Processing的话,那么你会很快上手Pro…

    JavaScript 2023年5月27日
    00
  • JavaScript实现邮箱后缀提示功能的示例代码

    下面我将为您详细讲解“JavaScript实现邮箱后缀提示功能的示例代码”的完整攻略: 1. 准备工作 在开始编写代码之前,需要确保准备好以下工作: HTML文档:在HTML文档中添加邮件输入框和提示框。 CSS样式:对邮件输入框和提示框进行样式修饰。 JavaScript代码:对邮件输入框进行监测,并实现动态提示邮箱后缀的功能。 下面是一个简单的HTML模…

    JavaScript 2023年6月1日
    00
  • Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文深入理解 在理解Javascript中的作用域和上下文之前,需要先了解一些基本的概念。 作用域 作用域定义了变量和函数的可访问性。在Javascript中,作用域分为全局作用域和函数作用域。全局作用域是在整个程序中都可访问的作用域,而函数作用域只有在函数内部才能访问。 var关键字的作用域 使用var关键字声明的变量的作…

    JavaScript 2023年6月10日
    00
  • JS中new Date().Format(“yyyy-MM-dd”) 报错的解决

    JS中使用new Date().Format(“yyyy-MM-dd”)进行日期格式化时,会出现报错的问题。这是因为JS本身不支持Date对象的Format方法。要正确地格式化日期,需要使用JS的日期对象的原型扩展prototype方法。 具体的解决方法是:通过扩展JS中日期对象的原型,自定义一个Format方法,将日期格式化成所需要的字符串形式。以下是代码…

    JavaScript 2023年5月18日
    00
  • JavaScript的高级概念和用法详解

    JavaScript的高级概念和用法详解 JavaScript 是一种广泛使用的脚本语言,具有灵活性、动态性和可重用性等优点。而随着前端技术的飞速发展,JavaScript也不断更新迭代,涌现出越来越多的高级概念和用法,本文将对其中几个重要的进行详细讲解。 1. 闭包 闭包是一种特殊的函数,它能够访问并操作函数作用域以外的变量。在 JavaScript 中,…

    JavaScript 2023年5月17日
    00
  • 浅谈在js传递参数中含加号(+)的处理方式

    下面我就来详细讲解在js传递参数中含加号(+)的处理方式: 1. 问题描述 在URL参数传递时有时会遇到含有加号(+)的情况,这时候我们需要进行特殊处理,否则这个加号会被解析成空格,导致参数传递错误。 例如,我们想要传递一个字符串 “hello+world”,但是如果直接将这个字符串”hello+world”作为URL参数进行传递,会被解析成 “hello …

    JavaScript 2023年5月19日
    00
  • 详解JavaScript中|单竖杠运算符的使用方法

    下面是对“详解JavaScript中|单竖杠运算符的使用方法”的完整攻略。 什么是“|”单竖杠运算符 在JavaScript中,“|”单竖杠运算符属于按位运算符之一。该运算符可将两个操作数转换成32位整数,并执行按位或操作。按位或操作返回一个32位的二进制数,每一位上的值都是将两个操作数的对应位进行或运算的结果。 单竖杠运算符在JavaScript中的应用 …

    JavaScript 2023年5月28日
    00
  • JavaScript实现的简单幂函数实例

    下面是JavaScript实现的简单幂函数实例的完整攻略。 标题 JavaScript实现的简单幂函数 代码块 下面是实现幂函数的JavaScript代码块: function pow(x, n) { let result = 1; for (let i = 0; i < n; i++) { result *= x; } return result; …

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