【JS】JavaScript|【JS】JavaScript Cookie(js-cookie)
什么是JavaScript Cookie(js-cookie)
JavaScript Cookie是一个简单、轻巧的JavaScript API,专门用于处理cookie
具有如下特性
- 适用于任何浏览器
- 接受所有字符
- 经过严格测试
- 无依赖性
- 支持JSON
- 支持AMD / CommonJS
- 符合RFC 6265
- 支持自定义编码/解码
- 压缩后约900个字节!
如何安装
$ npm install js-cookie --save
如何使用
- 已安装后使用
// 在需要的文件中使用
// 或者在main.js中引入后使用
// 引入
import Cookies from 'js-cookie'
// 使用
this.$cookie
- 未安装使用
注意:不要直接从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()
方法读取后才可以使用。读取时,domain
和path
属性将不起作用。- 删除 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 读取 【【JS】JavaScript|【JS】JavaScript Cookie(js-cookie)】创建一个新的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
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长