一、为什么需要js-cookie?
1.1 原生Cookie的痛点
javascript
// 原生Cookie写法
document.cookie = "name=John; expires=" + new Date(2024, 1, 1).toUTCString();
// 原生Cookie读取
let name = document.cookie.split('; ').find(row => row.startsWith('name=')).split('=')[1];
// 原生Cookie删除
document.cookie = "name=; expires=" + new Date(0).toUTCString();
1.2 js-cookie的优势
- 简洁的API:一行代码完成Cookie的CRUD操作
- 自动编码:自动处理特殊字符的编码/解码
- 类型安全:支持TypeScript类型定义
- 跨域支持:内置跨域Cookie管理
- 浏览器兼容:支持所有主流浏览器
二、快速入门:基础操作
2.1 安装与引入
bash
# npm安装
npm install js-cookie
# CDN引入
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js"></script>
2.2 基本操作
javascript
// 设置Cookie
Cookies.set('name', 'John');
Cookies.set('age', 30, { expires: 7 }); // 7天后过期
// 读取Cookie
const name = Cookies.get('name'); // 'John'
const age = Cookies.get('age'); // '30'
// 删除Cookie
Cookies.remove('age');
// 获取所有Cookie
const allCookies = Cookies.get(); // { name: 'John' }
// 设置多个Cookie
Cookies.set({
name: 'John',
age: 30,
city: 'New York'
});
三、高级特性:深度探索
3.1 Cookie配置选项
javascript
const options = {
expires: 7, // 7天后过期
path: '/', // 有效路径
domain: 'example.com', // 有效域名
secure: true, // 只在HTTPS下发送
sameSite: 'Strict', // 同站策略
};
// 设置带配置的Cookie
Cookies.set('token', 'abc123', options);
3.2 JSON序列化
javascript
// 存储对象
const user = { id: 1, name: 'John' };
Cookies.set('user', JSON.stringify(user));
// 读取对象
const userData = JSON.parse(Cookies.get('user'));
四、常见问题与解决方案
4.1 Cookie大小限制
javascript
// 检查Cookie大小
const maxSize = 4096; // 4KB
const value = 'some long value';
if (value.length > maxSize) {
throw new Error('Cookie值过大');
}
4.2 跨域问题
javascript
// 设置跨域Cookie
Cookies.set('crossDomain', 'value', {
domain: '.example.com',
path: '/',
secure: true,
sameSite: 'None'
});
4.3 浏览器兼容性
javascript
// 检查Cookie支持
if (Cookies.enabled) {
// Cookie可用
} else {
// 使用localStorage作为备选方案
localStorage.setItem('key', 'value');
}
结语
如果你喜欢本教程,记得点赞+收藏!关注我获取更多JavaScript开发干货。