JavaScript 基础教程JavaScript 简介JavaScript 用法JavaScript 输出JavaScript 语法JavaScript 语句JavaScript 注释JavaScript 变量JavaScript 数据类型JavaScript 对象JavaScript 函数JavaScript 作用域JavaScript 事件JavaScript 字符串JavaScript 运算符JavaScript 比较和逻辑运算符JavaScript if...else 语句JavaScript switch 语句JavaScript for 循环JavaScript while 循环JavaScript break 和 continue 语句JavaScript typeof, null, undefinedJavaScript 类型转换JavaScript 正则表达式JavaScript 错误throw try catchJavaScript 调试JavaScript 变量提升JavaScript 严格模式 (use strict)JavaScript 使用误区JavaScript 表单JavaScript 表单验证JavaScript 验证 APIJavaScript 保留关键字JavaScript JSONjavascript :void(0) 含义JavaScript 代码规范JavaScript 函数定义JavaScript 函数参数JavaScript 函数调用JavaScript 闭包JavaScript HTML DOMJavaScript DOM- 改变 HTMLJavaScript DOM - 改变 CSSJavaScript HTML DOM 事件JavaScript DOM EventListenerJavaScript DOM 元素(节点)JavaScript 对象类型JavaScript Number 对象JavaScript 字符串(String)对象JavaScript Date 对象JavaScript Array 对象JavaScript Boolean 对象JavaScript Math 对象JavaScript RegExp 对象JavaScript window 对象JavaScript window.screen 对象JavaScript window.location 对象JavaScript window.history 对象JavaScript window.navigator 对象JavaScript 弹窗JavaScript 计时事件JavaScript CookieJS中的if和switch该如何选择?JS优化多分支结构JS中的while和for循环该如何选择?JS优化循环结构JS输出杨辉三角JS定义字符串(3种方式)JS获取字符串长度JS字符串拼接/连接(3种方式)JS字符串查找(6种方法)JS截取字符串JS字符串替换replace()JS字符串大写小写转换JS字符串比较大小JS字符串和数组之间的转换JS给字符串添加HTML标签JS去除字符串前后空格JS Unicode编码和解码JS Base64编码和解码JS在接收表单数据时过滤特殊字符JS自定义编码和解码方案

JavaScript Cookie

Cookie 用于存储 web 页面的用户信息


什么是 Cookie?

Cookie 是一些数据, 存储于用户电脑上的文本文件中

HTTP 是无状态的协议,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息

Cookie 的作用就是用于解决 "如何记录客户端的用户信息"

  1. 当用户访问 web 页面时,他的名字可以记录在 cookie 中
  2. 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录

Cookie 以名/值对形式存储

username=John Doe

当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服务端通过这种方式来获取用户的信息


使用 JavaScript 创建 Cookie

JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie

JavaScript 中,创建 cookie 如下所示

document.cookie="username=John Doe";

我们还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间),默认情况下,cookie 在浏览器关闭时删除

document.cookie="username=John Doe; expires=Thu, 18 Dec 2019 12:00:00 GMT";

我们可以使用 path 参数告诉浏览器 cookie 的路径,默认情况下,cookie 属于当前页面

document.cookie="username=John Doe; expires=Thu, 18 Dec 2019 12:00:00 GMT; path=/";


使用 JavaScript 读取 Cookie

JavaScript 中, 可以使用以下代码来读取 cookie

var x = document.cookie;

document.cookie 将以字符串的方式返回所有的 cookie

类型格式

cookie1=value; cookie2=value; cookie3=value;

可以注意到,读取 Cookie 时不会返回 cookie 的过期时间和路径

因为只能读取没有过期的且在当前路径或者父路劲下的 Cookie


使用 JavaScript 修改 Cookie

JavaScript 中,修改 cookie 类似于创建 cookie

document.cookie="username=John Smith; expires=Thu, 18 Dec 2019 12:00:00 GMT; path=/";

旧的 cookie 将被覆盖


使用 JavaScript 删除 Cookie

删除 cookie 非常简单,只需要设置 expires 参数为过去的时间即可

通常情况下设置为 Thu, 01 Jan 1970 00:00:00 GMT

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

删除时不必指定 cookie 的值


Cookie 字符串

document.cookie 属性看起来像一个普通的文本字符串,其实它不是

即使在 document.cookie 中写入一个完整的 cookie 字符串, 当我们重新读取该 cookie 信息时,cookie 信息是以名/值对的形式展示的

如果我们设置了新的 cookie,旧的 cookie 不会被覆盖

新 cookie 将添加到 document.cookie 中,所以如果重新读取 document.cookie 我们将获得如下所示的数据

cookie1=value; cookie2=value;

如果想要查找一个指定 cookie 值,必须创建一个JavaScript 函数在 cookie 字符串中查找 cookie 值


设置 cookie 值的函数

首先,我们创建一个函数 setCookie 用于存储访问者的名字

function setCookie(cname,cvalue,exdays)
{
  var d = new Date();
  d.setTime(d.getTime()+(exdays*24*60*60*1000));
  var expires = "expires="+d.toGMTString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}

函数解析

上面的函数参数中,cookie 的名称为 cname,cookie 的值为 cvalue,并设置了 cookie 的过期时间 expires

该函数设置了 cookie 名、cookie 值、cookie过期时间


获取 cookie 值的函数

然后,我们创建一个函数 getCookie 用于返回指定 cookie 的值

function getCookie(cname)
{
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i < ca.length; i++) 
  {
    var c = ca[i].trim();
    if (c.indexOf(name)==0)
      return c.substring(name.length,c.length);
  }
  return null;
}

函数解析

cookie 名的参数为 cname

  1. 创建一个文本变量用于检索指定 cookie : cname + "="

  2. 使用分号来分割 document.cookie 字符串,并将分割后的字符串数组赋值给 ca ( ca = document.cookie.split(';'))

  3. 循环 ca 数组 (i=0;i < ca.length;i++) 然后读取数组中的每个值,并去除前后空格 ( c=ca[i].trim() )

  4. 如果找到 cookie( c.indexOf(name) == 0 ),返回 cookie 的值 ( c.substring(name.length,c.length)

  5. 如果没有找到 cookie, 返回 null


检测 cookie 值的函数

最后,我们可以创建一个 检测 cookie 是否存在的函数

如果设置了 cookie,将显示一个问候信息

如果没有设置 cookie,将会显示一个弹窗用于询问访问者的名字,并调用 setCookie 函数将访问者的名字存储 365 天

function checkCookie()
{
  var username=getCookie("username");
  if (username!="")
  {
    alert("Welcome again " + username);
  }
  else 
  {
    username = prompt("Please enter your name:","");
    if (username!="" && username!=null)
    {
      setCookie("username",username,365);
    }
  }
}

完整代码

function setCookie(cname,cvalue,exdays)
{
  var d = new Date();
  d.setTime(d.getTime()+(exdays*24*60*60*1000));
  var expires = "expires="+d.toGMTString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}

function getCookie(cname)
{
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i < ca.length; i++) 
  {
    var c = ca[i].trim();
    if (c.indexOf(name)==0) return c.substring(name.length,c.length);
  }
  return "";
}

function checkCookie()
{
  var user=getCookie("username");
  if (user!="")
  {
    alert("Welcome again " + user);
  }
  else 
  {
    user = prompt("Please enter your name:","");
    if (user!="" && user!=null)
    {
      setCookie("username",user,365);
    }
  }
}

链接: https://www.fly63.com/course/7_528