网站开发项目报价方案邯郸做网站公司

张小明 2026/1/1 1:35:55
网站开发项目报价方案,邯郸做网站公司,品牌型网站建设,做网页初学者教程1. 核心区别对比表特性CookieSession存储位置客户端浏览器服务器端存储内容文本数据#xff08;key-value#xff09;对象数据#xff08;通常有Session ID#xff09;安全性较低#xff08;可被篡改#xff09;较高#xff08;服务器控制#xff09;存储大小每个域名通…1.核心区别对比表特性CookieSession存储位置客户端浏览器服务器端存储内容文本数据key-value对象数据通常有Session ID安全性较低可被篡改较高服务器控制存储大小每个域名通常 ≤ 4KB仅受服务器限制生命周期可设置过期时间通常浏览器关闭或超时性能影响每次请求自动携带服务器需要查询存储跨域支持有限制同源策略不受限制服务器间2.Cookie 详解2.1Cookie 的结构Set-Cookie: namevalue; ExpiresWed, 21 Oct 2025 07:28:00 GMT; Max-Age3600; Domainexample.com; Path/; Secure; HttpOnly; SameSiteStrict2.2Cookie 的属性和作用const cookieAttributes { // 基础属性 name: sessionId, value: abc123xyz, // 有效期控制 expires: 2025-12-31T23:59:59Z, // 绝对时间 maxAge: 3600, // 相对时间秒 // 作用域控制 domain: .example.com, // 可作用于子域名 path: /api, // 指定路径 // 安全属性 secure: true, // 仅HTTPS传输 httpOnly: true, // 禁止JavaScript访问 sameSite: Strict, // 防止CSRF // 新属性 partitioned: true, // 第一方隔离 priority: High // 存储优先级 };2.3Cookie 如何传递给后端方式1浏览器自动携带# 请求头中的 Cookie GET /api/user HTTP/1.1 Host: example.com Cookie: sessionIdabc123xyz; usernamejohndoe; themedark Connection: keep-alive方式2手动设置JavaScript// 1. 设置 Cookie document.cookie usernamejohn; path/; max-age3600; // 2. 读取 Cookie const cookies document.cookie.split(;).reduce((acc, cookie) { const [key, value] cookie.trim().split(); acc[key] value; return acc; }, {}); // 3. 删除 Cookie设置过期时间 document.cookie username; expiresThu, 01 Jan 1970 00:00:00 UTC; path/;; // 4. 在请求中手动添加 Cookie fetch(/api/data, { headers: { Cookie: sessionIdabc123 } });方式3服务器端设置// Node.js Express app.get(/login, (req, res) { // 设置 Cookie res.cookie(sessionId, abc123, { maxAge: 24 * 60 * 60 * 1000, // 24小时 httpOnly: true, secure: process.env.NODE_ENV production, sameSite: strict }); // 设置多个 Cookie res.cookie(user, JSON.stringify({ id: 1, name: John }), { maxAge: 900000 }); });3.Session 详解3.1Session 工作原理客户端 服务器 | | |--- 1. 登录请求 ----------| | | | 2. 创建Session ---------| | sessionId abc123 | | sessionStore[sessionId] {userId: 1} | | | |-- 3. 返回Set-Cookie -----| | Set-Cookie: sessionIdabc123 | | |--- 4. 携带Cookie请求 -----| | Cookie: sessionIdabc123 | | | | 5. 验证Session ---------| | user sessionStore[sessionId] | | |-- 6. 返回数据 ------------|3.2Session 存储方式// 1. 内存存储不推荐生产环境 const sessionStore new Map(); // 2. Redis 存储推荐 const redisSessionStore { async set(sessionId, sessionData) { await redisClient.set( session:${sessionId}, JSON.stringify(sessionData), EX, 3600 // 1小时过期 ); }, async get(sessionId) { const data await redisClient.get(session:${sessionId}); return data ? JSON.parse(data) : null; } }; // 3. 数据库存储 const dbSessionStore { async set(sessionId, sessionData) { await db.sessions.upsert({ where: { sessionId }, update: { data: JSON.stringify(sessionData), expiresAt: new Date(Date.now() 3600000) }, create: { sessionId, data: JSON.stringify(sessionData), expiresAt: new Date(Date.now() 3600000) } }); } };4.完整登录流程示例4.1基于 Session 的认证流程// 前端代码React const LoginForm () { const [credentials, setCredentials] useState({ username: , password: }); const handleLogin async () { try { // 1. 发送登录请求 const response await fetch(/api/login, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify(credentials), credentials: include // 关键允许携带Cookie }); // 2. 检查响应状态 if (response.ok) { // 3. 后续请求会自动携带Cookie const userData await fetch(/api/user/profile, { credentials: include }).then(res res.json()); console.log(登录成功, userData); } } catch (error) { console.error(登录失败, error); } }; return ( form onSubmit{(e) { e.preventDefault(); handleLogin(); }} input value{credentials.username} onChange{(e) setCredentials({...credentials, username: e.target.value})} / input typepassword value{credentials.password} onChange{(e) setCredentials({...credentials, password: e.target.value})} / button typesubmit登录/button /form ); };4.2后端代码Node.js Expressconst express require(express); const session require(express-session); const RedisStore require(connect-redis)(session); const redis require(redis); const app express(); // 1. 创建Redis客户端 const redisClient redis.createClient({ host: localhost, port: 6379 }); // 2. 配置Session中间件 app.use(session({ store: new RedisStore({ client: redisClient }), secret: your-secret-key, resave: false, saveUninitialized: false, cookie: { maxAge: 24 * 60 * 60 * 1000, // 24小时 httpOnly: true, secure: process.env.NODE_ENV production, sameSite: strict } })); // 3. 登录路由 app.post(/api/login, (req, res) { const { username, password } req.body; // 验证用户 const user authenticateUser(username, password); if (user) { // 将用户信息存入session req.session.userId user.id; req.session.username user.username; req.session.role user.role; // 设置登录时间 req.session.loginTime new Date(); res.json({ success: true, message: 登录成功, user: { id: user.id, username: user.username } }); } else { res.status(401).json({ success: false, message: 登录失败 }); } }); // 4. 受保护的路由 app.get(/api/user/profile, (req, res) { // 检查session if (!req.session.userId) { return res.status(401).json({ error: 未登录 }); } // 获取用户数据 const userData getUserById(req.session.userId); res.json(userData); }); // 5. 登出 app.post(/api/logout, (req, res) { req.session.destroy((err) { if (err) { return res.status(500).json({ error: 登出失败 }); } // 清除客户端Cookie res.clearCookie(connect.sid); res.json({ success: true, message: 已登出 }); }); });5.Cookie 传输的常见问题与解决方案5.1跨域请求携带 Cookie// 前端设置 fetch(https://api.example.com/data, { method: GET, credentials: include, // 关键允许发送Cookie headers: { Content-Type: application/json, } }); // 后端设置CORS配置 app.use(cors({ origin: https://frontend.com, // 允许的源 credentials: true, // 允许携带凭证 methods: [GET, POST, PUT, DELETE], allowedHeaders: [Content-Type, Authorization] })); // 或者手动设置响应头 app.use((req, res, next) { res.header(Access-Control-Allow-Origin, https://frontend.com); res.header(Access-Control-Allow-Credentials, true); res.header(Access-Control-Allow-Headers, Content-Type, Authorization); next(); });5.2SameSite 属性详解// 不同SameSite策略的影响 const sameSiteStrategies { Strict: { description: 完全禁止跨站Cookie, useCase: 银行、支付等敏感操作, example: SameSiteStrict }, Lax: { description: 允许部分安全的跨站请求如导航, useCase: 默认值适合大多数场景, example: SameSiteLax, allowedRequests: [ 从外部链接点击进入GET, 页面刷新, 预加载请求 ] }, None: { description: 允许所有跨站请求, useCase: 需要跨站功能的场景如SSO, requirements: [ 必须同时设置Secure属性, 必须使用HTTPS ], example: SameSiteNone; Secure } };5.3Cookie 大小限制与优化// 优化策略 const cookieOptimization { // 1. 减少Cookie数量 strategies: [ 合并多个Cookie为一个, 使用Session替代大量Cookie, 将非必要数据存储到LocalStorage ], // 2. 压缩Cookie值 compressCookie: (data) { const jsonStr JSON.stringify(data); // 使用base64编码压缩 return Buffer.from(jsonStr).toString(base64); }, // 3. 按需发送Cookie setupCookies: () { // 主域名设置通用Cookie document.cookie themedark; domain.example.com; path/; // 子域名设置特定Cookie document.cookie api_tokenxyz; domainapi.example.com; path/; // 特定路径设置Cookie document.cookie cart_items3; path/shop; }, // 4. 定期清理过期Cookie cleanupCookies: () { const cookies document.cookie.split(;); cookies.forEach(cookie { const [name, value] cookie.trim().split(); // 检查并删除过期Cookie if (isCookieExpired(name)) { document.cookie ${name}; expiresThu, 01 Jan 1970 00:00:00 GMT; path/; } }); } };6.现代认证方案对比6.1传统 Session vs JWT// JWT 认证流程 const jwtAuth { login: async (username, password) { // 1. 验证用户 const user await validateUser(username, password); // 2. 生成JWT const token jwt.sign( { userId: user.id, role: user.role }, process.env.JWT_SECRET, { expiresIn: 24h } ); // 3. 可选存储在HttpOnly Cookie中 res.cookie(jwt, token, { httpOnly: true, secure: true, sameSite: strict }); return token; }, // 验证中间件 authenticate: (req, res, next) { // 从Cookie或Authorization头获取token const token req.cookies.jwt || req.headers.authorization?.split( )[1]; if (!token) { return res.status(401).json({ error: 未授权 }); } try { const decoded jwt.verify(token, process.env.JWT_SECRET); req.user decoded; next(); } catch (error) { return res.status(401).json({ error: Token无效 }); } } };6.2Session、JWT、OAuth 2.0 对比Session-Based: 优点: 服务端可控安全性高可随时撤销 缺点: 服务器有状态扩展性差CSRF风险 适用: 传统Web应用管理后台 JWT (Token-Based): 优点: 无状态扩展性好适合微服务 缺点: Token一旦签发无法撤销需短有效期 适用: 移动AppSPAAPI服务 OAuth 2.0: 优点: 第三方登录权限委托标准化 缺点: 实现复杂依赖第三方 适用: 社交登录API授权7.安全最佳实践7.1Cookie 安全设置// 安全的Cookie配置 const secureCookieConfig { // 生产环境必须启用 secure: process.env.NODE_ENV production, // 防止XSS攻击 httpOnly: true, // 防止CSRF攻击 sameSite: strict, // 或 lax // 限制作用域 domain: example.com, // 不设置点前缀限制精确域名 path: /api, // 限制路径 // 过期时间 maxAge: 15 * 60 * 1000, // 15分钟会话类Cookie // 签名防止篡改 signed: true }; // Express中应用 res.cookie(sessionId, sessionId, secureCookieConfig);7.2防御常见攻击// 1. 防御CSRF app.use(csrf({ cookie: { key: _csrf, path: /, httpOnly: true, secure: process.env.NODE_ENV production, sameSite: strict } })); // 2. 设置安全响应头 app.use(helmet()); // 3. 限制Cookie数量 app.use((req, res, next) { const cookieCount req.headers.cookie?.split(;).length || 0; if (cookieCount 10) { return res.status(400).json({ error: Too many cookies }); } next(); });8.调试与测试工具8.1浏览器开发者工具// 查看和管理Cookie console.log(document.cookie); // Chrome DevTools中 // 1. Application → Storage → Cookies // 2. Network → 查看请求头中的Cookie // 3. 手动修改和删除Cookie进行测试8.2命令行工具# 查看网站Cookie curl -v https://example.com # 发送带Cookie的请求 curl -H Cookie: sessionIdabc123 https://api.example.com/data # 测试Cookie属性 # 使用浏览器插件EditThisCookie, Cookie-Editor总结选择建议传统Web应用使用 Session HttpOnly CookieSPA API使用 JWT HttpOnly Cookie 或 Authorization Header第三方集成使用 OAuth 2.0敏感操作启用双重认证Session 短期Token关键要点Cookie 自动传输浏览器自动在请求头中携带Session 需要CookieSession ID通过Cookie传递安全第一始终使用 HttpOnly Secure SameSite跨域注意需要正确配置CORS和Cookie属性性能考虑避免过多Cookie合理设置过期时间现代趋势逐渐转向无状态认证JWTSameSiteLax 成为默认第一方Cookie隔离Partitioned属性减少对第三方Cookie的依赖
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

东莞网站设计如何wordpress怎么做网页

ConfigMgr内容分发、管理与补丁部署全攻略 1. 内容分发基础 在ConfigMgr环境中,内容分发是确保客户端能够访问所需资源的关键步骤。PXE(预启动执行环境)支持是操作系统部署的重要功能,通过启用DP(分发点)的PXE支持,可使其响应客户端的网络启动请求。 # 使用PowerShe…

张小明 2025/12/27 14:43:33 网站建设

网站建设培训速成学做衣服的网站

eedVR2介绍SeedVR2 2.5.10于2025年11月13日正式发布,适用于 ComfyUI,支持高质量视频和图像放大。其主要特点如下:(一)核心能力高质量基于扩散的放大 :视频和图像增强的一步扩散模型时间一致性 :…

张小明 2025/12/27 16:53:37 网站建设

烟台开发区建设局网站做接口自动化是网站登录加密

2025年中国海洋大学计算机考研复试机试真题 2025年中国海洋大学计算机考研复试上机真题 历年中国海洋大学计算机考研复试上机真题 历年中国海洋大学计算机考研复试机试真题 更多学校题目开源地址:https://gitcode.com/verticallimit1/noobdream N 诺 DreamJudg…

张小明 2025/12/28 14:47:30 网站建设

网站开发大全做一个网站成本是多少合适

第一章:智谱清言核心技术架构概览智谱清言作为新一代大模型服务平台,其核心技术架构融合了大规模预训练模型、分布式计算框架与高效推理优化技术。系统底层依托高性能GPU集群与容器化调度平台,支持千亿参数模型的稳定训练与弹性部署。模型核心…

张小明 2025/12/28 19:05:29 网站建设

在您的网站首页添加标签设计师做兼职的网站

Wyn商业智能:问答式自助BI工具如何重塑企业数据分析模式? 一、行业痛点:传统BI的“高墙”与“时差” 在数据驱动的决策时代,传统商业智能(BI)工具正面临严峻挑战。业务人员往往被困在“高墙”之内&#xff…

张小明 2025/12/29 2:51:14 网站建设

进腾讯做游戏视频网站wordpress 宽屏 主题

Langchain-Chatchat问答系统灰度阶段性能瓶颈分析 在企业智能化转型的浪潮中,知识管理正从“文档存档”走向“智能问答”。越来越多公司尝试部署本地化大模型系统,以实现对私有知识库的高效利用。然而,当理想照进现实——特别是在Langchain-C…

张小明 2025/12/28 18:35:42 网站建设