您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Cookie使用实例代码分析
## 一、Cookie基础概念
Cookie是网站在用户浏览器上存储的小型文本数据,主要用于会话状态管理、个性化设置和用户行为跟踪。根据生命周期可分为:
- 会话Cookie:浏览器关闭后自动删除
- 持久Cookie:通过`Expires`或`Max-Age`设置有效期
## 二、前端Cookie操作实例
### 1. 原生JavaScript实现
```javascript
// 设置Cookie
function setCookie(name, value, days) {
let expires = "";
if (days) {
const date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = `${name}=${value}${expires}; path=/`;
}
// 获取Cookie
function getCookie(name) {
const cookies = document.cookie.split(';');
for(let cookie of cookies) {
const [cookieName, cookieValue] = cookie.trim().split('=');
if(cookieName === name) return decodeURIComponent(cookieValue);
}
return null;
}
// 删除Cookie
function deleteCookie(name) {
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
}
用户主题偏好存储
// 设置主题
function setTheme(theme) {
setCookie('user_theme', theme, 30);
applyTheme(theme);
}
// 页面加载时应用主题
window.addEventListener('DOMContentLoaded', () => {
const savedTheme = getCookie('user_theme') || 'light';
applyTheme(savedTheme);
});
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
// 设置Cookie
app.get('/set-cookie', (req, res) => {
res.cookie('user_token', 'abc123', {
maxAge: 86400000, // 1天
httpOnly: true,
secure: true,
sameSite: 'strict'
});
res.send('Cookie已设置');
});
// 读取Cookie
app.get('/get-cookie', (req, res) => {
const token = req.cookies.user_token;
res.send(`获取到的Token: ${token}`);
});
// 删除Cookie
app.get('/logout', (req, res) => {
res.clearCookie('user_token');
res.send('已退出登录');
});
// 设置Cookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
Cookie userCookie = new Cookie("last_visit", new Date().toString());
userCookie.setMaxAge(60*60*24*7); // 一周有效期
userCookie.setHttpOnly(true);
response.addCookie(userCookie);
}
// 读取Cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("last_visit".equals(cookie.getName())) {
System.out.println("最后访问时间: " + cookie.getValue());
}
}
}
属性 | 说明 | 推荐值 |
---|---|---|
HttpOnly | 防止XSS攻击访问Cookie | true |
Secure | 仅通过HTTPS传输 | 生产环境启用 |
SameSite | 控制跨站请求Cookie发送 | Lax/Strict |
CSRF防护方案:
// 生成并存储CSRF Token
const csrfToken = generateRandomString();
res.cookie('XSRF-TOKEN', csrfToken, {
httpOnly: false, // 需要前端读取
sameSite: 'strict'
});
// 前端发送请求时携带
fetch('/api/payment', {
method: 'POST',
headers: {
'X-XSRF-TOKEN': getCookie('XSRF-TOKEN')
}
});
// localStorage长期存储
localStorage.setItem('user_settings', JSON.stringify(settings));
// sessionStorage会话存储
sessionStorage.setItem('temp_data', data);
特性 | Cookie | localStorage | sessionStorage |
---|---|---|---|
容量限制 | 4KB左右 | 5MB+ | 5MB+ |
自动发送到服务器 | 是 | 否 | 否 |
生命周期 | 可设置过期时间 | 永久 | 会话结束清除 |
混合存储策略:
// 未登录用户使用Cookie
function saveCartItems(items) {
if (isLoggedIn()) {
// 已登录用户同步到服务器
api.saveCart(items);
} else {
setCookie('guest_cart', JSON.stringify(items), 7);
}
}
// 读取时合并数据
function loadCart() {
let items = [];
if (isLoggedIn()) {
items = api.getCart();
// 合并未登录时的购物车
const guestCart = getCookie('guest_cart');
if (guestCart) items = mergeCarts(items, JSON.parse(guestCart));
} else {
const cartData = getCookie('guest_cart');
if (cartData) items = JSON.parse(cartData);
}
return items;
}
// 主域名设置
document.cookie = `language=zh; domain=.example.com; path=/; max-age=31536000`;
// 子域名可读取
// sub.example.com能读取.example.com设置的Cookie
浏览器开发者工具查看:
常见问题:
Cookie作为Web开发的基础技术,虽然面临新的存储方案竞争,但在会话管理、身份认证等场景仍不可替代。合理设置安全属性、选择适当的存储策略,并配合现代Web技术使用,可以构建既安全又用户友好的Web应用。 “`
注:本文实际约1450字,包含代码示例、对比表格和实用案例分析,完整覆盖Cookie的使用场景和技术细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。