【JS】JavaScript Cookie(js-cookie)

什么是JavaScript Cookie(js-cookie)

JavaScript Cookie是一个简单、轻巧的JavaScript API,专门用于处理cookie
具有如下特性

  • 适用于任何浏览器
  • 接受所有字符
  • 经过严格测试
  • 无依赖性
  • 支持JSON
  • 支持AMD / CommonJS
  • 符合RFC 6265
  • 支持自定义编码/解码
  • 压缩后约900个字节!

github地址请点击这里

如何安装

$ npm install js-cookie --save

如何使用

  • 已安装后使用

// 在需要的文件中使用
<script src="/path/to/js.cookie.js"></script>

// 或者在main.js中引入后使用
// 引入
import Cookies from  js-cookie 
// 使用
this.$cookie

  • 未安装使用

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>

注意:不要直接从GitHub(http://raw.github.com / …)包含脚本。该文件被用作文本/纯文本,因此例如在Windows 7的Internet Explorer中被阻止(由于错误的MIME类型)

基础用法

  • 创建一个cookie,使其在网站内皆可使用

Cookies.set( name ,  value );

  • 创建一个从目前起7天到期的cookie,使其在网站内皆可使用

Cookies.set( name ,  value , { expires: 7 });

  • 创建一个从目前起7天到期的cookie,使其在当前页面内可用

Cookies.set( name ,  value , { expires: 7, path:    });

  • 读取cookie

Cookies.get( name ); // =>  value 

Cookies.get( nothing ); // => undefined

  • 读取所有可见cookie

Cookies.get(); // => { name:  value  }

注意:不可通过特定的key值去获取相对应的cookie(无论是cookie在之前使用过或者未使用过)

Cookies.get( foo , { domain:  sub.example.com  }); // 将不会有任何响应

名为foo的cookie仅在通过.get()方法读取后才可以使用。读取时,domainpath属性将不起作用。

  • 删除 cookie

Cookies.remove( name );

  • 删除当前页面的cookie

Cookies.set( name ,  value , { path:    });

Cookies.remove( name ); // 失败!

Cookies.remove( name , { path:    }); // 成功!

注意!!!:删除Cookie时,如果您不依赖默认属性,则必须传递与设置Cookie时使用的完全一样的路径和域属性

Cookies.remove( name , { path:   , domain:  .yourdomain.com  });

注意:移除不存在的cookie不会抛出异常

关于命名冲突

如果存在可能存在命名冲突的cookie名,noConflict()方法将使我们可以使用我们需要的命名且保留原本冲突的名字。在一些第三方插件(例如,作为组件或SDK的一部分)上运行脚本时,这特别有用。

// Assign the js-cookie api to a different variable and restore the original "window.Cookies"
var Cookies2 = Cookies.noConflict();
Cookies2.set( name ,  value );

JSON

js-cookie 提供了简易的JSON使用
当我们需要创建cookie时,我们可以使用Array或者Object,而不是只能使用String。当你使用Array或者Object后,可以通过JSON.stringify()来获取到对应的对象

Cookies.set( name , { foo:  bar  });

当我们使用Cookies.get()读取cookie时,我们获取到的是一个String

Cookies.get( name ); // =>  {"foo":"bar"} 


Cookies.get(); // => { name:  {"foo":"bar"}  }

当我们使用Cookie.getJSON()读取cookie是,会自动对String进行JSON.parse()操作

Cookies.getJSON( name ); // => { foo:  bar  }

Cookies.getJSON(); // => { name: { foo:  bar  } }

编码与解码

编码与解码符合RFC 6265。cookie的名称或cookie的值中不允许包含所有特殊字符。相应的会使用percent-encoding
和UTF-8进行编码
cookie名称或cookie值中唯一被允许使用的特殊是字符是%字符。是为了能将percent-encoding的字符转义为文字。
请注意,默认的编码/解码策略只能在js-cookie读/写cookie之间相互操作。要覆盖默认的编码/解码策略,您需要使用Converter。

注意:根据RFC 6265,如果您的Cookie太大或同一域中的Cookie太多,则它们可能会被删除,有关更多详细信息,请点击此处。

Cookie的属性

可以通过设置Cookies.defaults对象的属性来全局设置Cookie属性默认值,也可以通过Cookies.set(...)在最后一个参数中传递普通对象来为每次调用分别设置Cookie属性默认值。每次传递的属性会覆盖默认属性。

expires

定义何时删除cookie。值可以是 Number,它将被解释为从创建日期Date实例开始算起的天数。如果省略,则该cookie成为会话cookie。

default

当用户关闭浏览器时,将删除Cookie

path

一个指示cookie可见的String路径。

Converters

读取

创建一个新的api实例,该实例将覆盖默认的decoding实例。
所有读取方法依赖于正确的decoding的执行(例如Cookies.get()Cookies.get( name ))。调用这些方法的时候,都将第一运行cookie运行转换器。
返回的字符串将用作cookie值。
例如下方对于escaped例子的使用

document.cookie =  escaped=%u5317 ;
document.cookie =  default=%E5%8C%97 ;
var cookies = Cookies.withConverter(function (value, name) {
    if ( name ===  escaped  ) {
        return unescape(value);
    }
});
cookies.get( escaped ); // 北
cookies.get( default ); // 北
cookies.get(); // { escaped:  北 , default:  北  }

写入

创建一个覆盖默认encoding的api实例:

Cookies.withConverter({
    read: function (value, name) {
        // Read converter
    },
    write: function (value, name) {
        // Write converter
    }
});

该文章主要参考自:https://www.npmjs.com/package/js-cookie#json

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容