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

yizhihongxing

下面是详细讲解“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日

相关文章

  • PWA介绍及快速上手搭建一个PWA应用的方法

    PWA(Progressive Web App)是一种新型的WEB应用程序模型,它融合了 Web 和 Native 应用的优势。在移动端可更好的解决应用安装、流量消耗、离线访问、消息推送等问题,能够将您的网站变成一个类似于原生移动应用的东西。 本文将介绍PWA的相关知识,并提供快速上手的搭建PWA应用的方法。 PWA介绍 PWA其实是一种思路,而不是某个具体…

    JavaScript 2023年6月10日
    00
  • js中对象和面向对象与Json介绍

    JS中对象和面向对象 JS中的对象是一种复合数据类型,可以存储不同类型的数据,例如数字、布尔值、字符串、数组和函数等。对象以键值对的形式存储数据,每个属性都有一个唯一的键名和对应的值。 面向对象(Object Oriented,简称OO)是一种编程范式,强调将程序中的数据和操作数据的代码组织成一个相互依赖的对象,从而增强程序的可重复性、可维护性等特性。 JS…

    JavaScript 2023年5月27日
    00
  • JavaScript定时器使用方法详解

    下面是“JavaScript定时器使用方法详解”的完整攻略: JavaScript定时器使用方法详解 JavaScript定时器是指在指定时间间隔内以指定频率执行指定函数的机制,它主要有两种定时器函数:setInterval和setTimeout。 setInterval setInterval函数的语法如下: setInterval(function, d…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript的Symbol类型、隐藏属性、全局注册表

    详解JavaScript的Symbol类型、隐藏属性、全局注册表 JavaScript的Symbol类型 JavaScript的Symbol类型是ES6新增的一种基本数据类型,可以用来创建唯一的身份标识符。它是一种类似于字符串的数据类型,但是具有唯一性,并且不可变。 Symbol类型的创建方法是通过Symbol()函数,例如: const key = Sym…

    JavaScript 2023年5月27日
    00
  • JavaScript实现抖音罗盘时钟

    下面我将详细讲解如何用JavaScript实现抖音罗盘时钟。 准备工作 在编写JavaScript代码之前,我们需要先准备好HTML和CSS文件。HTML文件中包含了页面布局的基本结构,CSS文件中定义了页面对应的样式。具体代码如下: <!DOCTYPE html> <html lang="en"> <hea…

    JavaScript 2023年5月27日
    00
  • js分页显示div的内容

    下面是我的分页显示div内容的攻略: 什么是分页显示div的内容 分页显示div的内容是指在一个较大的div中,将内容进行分页,并且通过一些交互方式,可以实现翻页、跳页等操作,从而更好地展示数据。 分页显示div的实现 分页显示div的实现可以通过JavaScript代码来实现,其中包含以下几个步骤: 计算分页 首先需要计算数据的分页情况,这可以通过获取数据…

    JavaScript 2023年5月28日
    00
  • JS变量中有var定义和无var定义的区别以及es6中let命令和const命令

    JS变量中有var定义和无var定义的区别 在Javascript中,有使用var定义变量和不使用var直接定义变量两种方式。 1. 使用var定义变量 使用var定义的变量会存在变量提升,即在变量声明之前,该变量也可以被访问到。这种定义方式的变量作用域是该变量所在的函数作用域(如果在函数内定义)或全局作用域(如果在函数外定义)。 示例1:使用var定义变量…

    JavaScript 2023年6月10日
    00
  • JAVASCRIPT 客户端验证数据的合法性代码(正则)第2/2页

    JAVASCRIPT 客户端验证数据的合法性代码(正则)攻略 什么是正则表达式? 正则表达式,也称为RegExp对象,是一种强大且灵活的字符串匹配工具,可用于匹配、替换、删除文本内容。在JavaScript中,正则表达式由斜杠(/)包围,并在斜杠之间包含模式文本。 为什么要使用正则表达式? 数据的合法性是Web表单中的关键问题,JavaScript正则表达式…

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