当前位置: 首页 > news >正文

吉林省长春市建设局网站西安网站建设kxccc

吉林省长春市建设局网站,西安网站建设kxccc,比较有名的个人网站,惠州网站制作培训在 Node.js 中#xff0c;Cookie 和 Session 是实现用户身份验证和状态管理的核心技术。 一、核心概念 1. Cookie 定义#xff1a;服务器发送到用户浏览器并保存在本地的小段数据。用途#xff1a;存储用户信息、跟踪会话、记住登录状态等。特点#xff1a; 数据存储在客…在 Node.js 中Cookie 和 Session 是实现用户身份验证和状态管理的核心技术。 一、核心概念 1. Cookie 定义服务器发送到用户浏览器并保存在本地的小段数据。用途存储用户信息、跟踪会话、记住登录状态等。特点 数据存储在客户端。随每次 HTTP 请求发送到服务器。有大小限制通常 4KB。可设置过期时间。 2. Session 定义服务器端存储用户会话数据的机制。用途存储敏感信息如用户 ID、权限避免客户端篡改。特点 数据存储在服务器端。每个会话有唯一的 Session ID通常存储在 Cookie 中。需要配合 Cookie 或 URL 参数使用。 二、Cookie 基础用法 原生 Node.js 处理 Cookie 当你访问一个网站时服务器可以通过 HTTP 响应头 Set-Cookie 向你的浏览器发送一个或多个 Cookie。浏览器会保存这些 Cookie并在后续对该域名的请求中通过 Cookie 请求头自动发送回去给服务器。 const http require(http);const server http.createServer((req, res) {// 设置一个名为 example 的 Cookieres.setHeader(Set-Cookie, [examplevalue]);// 读取 Cookieconst cookies req.headers.cookie;console.log(Cookies received:, cookies);res.end(Hello World); });server.listen(3000, () {console.log(Server running at http://localhost:3000/); }); Cookie 的基本组成部分 一个完整的 Cookie 由以下部分组成 namevalue; Pathpath; Domaindomain; Expiresdate; Max-Ageseconds; HttpOnly; Secure; SameSitemode Set-Cookie: namevalue; [属性1值1]; [属性2值2]; ...1. 必选部分 namevalue Cookie 的名称和值必须用  连接且不能包含分号、逗号或空格。 示例 sessionIdabc123 usernamejohn_doe 2. 可选属性 Cookie 可以包含多个可选属性用于控制 Cookie 的行为 Path/ 指定 Cookie 的路径限制 Cookie 只在该路径下有效。 示例 Path/api → 仅 /api 及其子路径可访问。 Domainexample.com 指定 Cookie 的域名限制 Cookie 只在该域名及其子域名下有效。 示例 Domain.example.com → 对 example.com 和所有子域名有效。 ExpiresThu, 01 Jan 2030 00:00:00 GMT 指定 Cookie 的过期时间之后 Cookie 将被浏览器删除。 示例 ExpiresWed, 21 Oct 2025 07:28:00 GMT Max-Age3600 指定 Cookie 的有效期秒优先于 Expires。 示例 Max-Age86400 → 有效期 24 小时。 HttpOnly 标记 Cookie 只能通过 HTTP (S) 请求访问不能被 JavaScript 读取防止 XSS 攻击。 示例 HttpOnly Secure 标记 Cookie 只能通过 HTTPS 协议发送防止中间人攻击。 示例 Secure SameSiteStrict|Lax|None 控制 Cookie 在跨站请求时的行为防止 CSRF 攻击。 示例 SameSiteStrict → 仅允许同源请求携带 Cookie。 Cookie 属性详解 1. Path 属性 作用限制 Cookie 可被访问的路径。示例 Set-Cookie: userjohn; Path/admin该 Cookie 仅在 /admin 及其子路径如 /admin/dashboard中有效。访问 /home 时不会发送该 Cookie。 2. Domain 属性 作用指定 Cookie 可被访问的域名。示例 Set-Cookie: sessionabc; Domain.example.com该 Cookie 对 example.com、www.example.com、api.example.com 等子域名均有效。若未指定 Domain则默认为当前域名不包含子域名。 3. Expires 和 Max-Age Expires 指定具体的过期日期GMT 格式。示例 ExpiresSun, 10 Jun 2025 12:00:00 GMT → Cookie 将在该时间过期。 Max-Age 指定 Cookie 的有效期秒。示例 Max-Age0 → 立即删除 Cookie。 Max-Age3600 → 有效期 1 小时。 4. HttpOnly 作用防止 JavaScript 通过 document.cookie 访问 Cookie降低 XSS 攻击风险。示例 Set-Cookie: token123; HttpOnly该 Cookie 无法被 JavaScript 读取只能通过 HTTP 请求发送。 5. Secure 作用确保 Cookie 仅在 HTTPS 连接中发送防止中间人攻击。示例 Set-Cookie: authsecret; Secure在 HTTP 连接中该 Cookie 不会被发送。 6. SameSite 作用控制 Cookie 在跨站请求时的行为防止 CSRF 攻击。取值 Strict 仅允许同源请求携带 Cookie。 示例 Set-Cookie: csrf_tokenabc; SameSiteStrict从 https://example.com 访问 https://example.com 时发送 Cookie。从 https://another-site.com 访问 https://example.com 时不发送 Cookie。 Lax 允许部分跨站请求携带 Cookie主要是安全的 GET 请求。 示例 Set-Cookie: sessionxyz; SameSiteLax从外部网站通过链接访问GET 请求时发送 Cookie。从外部网站通过表单提交POST 请求时不发送 Cookie。 None 允许跨站请求携带 Cookie但必须同时设置 Secure 属性。 示例 Set-Cookie: tracking_id123; SameSiteNone; Secure仅在 HTTPS 环境下允许跨站请求携带 Cookie。 服务器发送 Cookie报文 HTTP/1.1 200 OK Set-Cookie: sessionIdabc123; Path/; HttpOnly Set-Cookie: userjohn; ExpiresThu, 01 Jan 2030 00:00:00 GMT; Secure; SameSiteLax Content-Type: text/html客户端发送 Cookie报文 GET /api/data HTTP/1.1 Host: example.com Cookie: sessionIdabc123; userjohnCookie 大小限制 大多数浏览器限制单个 Cookie 大小为 4KB。每个域名的 Cookie 数量限制通常为 50 个左右。 跨域 Cookie 默认情况下Cookie 不支持跨域。可通过 Domain 和 SameSiteNone; Secure 实现有限的跨域支持。 编码问题 Cookie 值应使用 encodeURIComponent() 编码读取时使用 decodeURIComponent() 解码。 在 Express 中设置 Cookie 需要的中间件 npm install cookie-parserconst express require(express); const app express();const cookieParser require(cookie-parser); app.use(cookieParser()); // 解析 Cookie// 设置 Cookie app.get(/set-cookie, (req, res) {res.cookie(username, john_doe, {maxAge: 3600000, // 有效期 1 小时毫秒httpOnly: true, // 防止客户端脚本访问secure: process.env.NODE_ENV production, // 仅 HTTPSsameSite: strict // 防止 CSRF 攻击});res.send(Cookie 已设置); });// 读取 Cookie app.get(/get-cookie, (req, res) {const username req.cookies.username;res.send(用户名: ${username}); });// 清除 Cookie app.get(/clear-cookie, (req, res) {res.clearCookie(username);res.send(Cookie 已清除); });app.listen(3000);三、Session 基础用法 在 Node.js 中没有内置的 Session 模块测试环境.可以通过组合 HTTP 模块、Cookie 和内存来原生实现 Session 管理。 用户需要session时.首先解析cookie.如果cookie里包含Session ID.通过 Session ID 查找对应的数据。如果没有Session ID,生成一个唯一的 Session ID通常使用 UUID,服务器端维护一个 Session 数据存储,将 Session ID 存储在 Cookie 中随请求写会客户端 // 内存中的 Session 存储 const sessions new Map(); const sessionCookieName session_id;const crypto require(crypto);// 生成随机 Session ID function generateSessionId() {return crypto.randomBytes(16).toString(hex); }// 解析 Cookie 字符串 function parseCookies(cookieHeader) {const cookies {};if (cookieHeader) {cookieHeader.split(; ).forEach(cookie {const [name, value] cookie.split();cookies[name] decodeURIComponent(value);});}return cookies;}setInterval(() {for (const [sessionId, session] of sessions) {if (Date.now() - session.timestamp 30 * 60 * 1000) {// 清除过期的 Sessionsessions.delete(sessionId);}}}, 30*60*1000); // 每30分钟检查一次session是否过期function destroySession(session_id){sessions.delete(session_id);}module.exports function(req, res){//用nodejs 解析res带过来的cookieconst cookie req.headers.cookie;const cookieObj parseCookies(cookie);const sessionId cookieObj[sessionCookieName];let timestamp Date.now();let state 0; // state 0 刚创建1过期从新创建2获取if( sessionId sessions.has(sessionId)){let tmpObj sessions.get(sessionId)if(timestamp - tmpObj[timestamp] 30*60*1000){//session过期state 1;let obj {timestamp,state};sessions.set(sessionId,obj);return obj;}tmpObj[state] 2;tmpObj[timestamp] timestamp;req.destroySession destroySession.bind(null,sessionId)return tmpObj;}else{const newSessionId generateSessionId();let obj {timestamp,state};sessions.set(newSessionId,obj)res.setHeader(Set-Cookie, [sessionCookieName newSessionId]);req.destroySession destroySession.bind(null,newSessionId)return obj;}} 在 Express 中使用 Session express-session 是 Express.js 的官方会话中间件用于管理用户会话。它提供了简单易用的 API支持多种存储后端是构建 Node.js 会话系统的首选方案。 npm install express-sessionconst express require(express); const session require(express-session); const app express();// 配置 Session app.use(session({secret: your-secret-key, // 用于签名 Session IDresave: false, // 不强制保存未修改的 SessionsaveUninitialized: true, // 保存新创建但未修改的 Sessioncookie: {maxAge: 3600000, // 有效期 1 小时httpOnly: true,secure: process.env.NODE_ENV production} }));// 使用 Session app.get(/login, (req, res) {// 模拟登录req.session.user { id: 1, name: John };req.session.isLoggedIn true;res.send(登录成功); });app.get(/profile, (req, res) {if (req.session.isLoggedIn) {res.send(欢迎 ${req.session.user.name});} else {res.status(401).send(未登录);} });app.get(/logout, (req, res) {req.session.destroy(err {if (err) {console.error(err);}res.send(已注销);}); });app.listen(3000);工作流程 用户登录时服务器创建 Session 并生成唯一 Session ID。Session ID 通过 Cookie 发送到客户端。后续请求中客户端通过 Cookie 发送 Session ID。服务器通过 Session ID 查找对应的 Session 数据。 与JWT对比 特性Cookie/SessionJWT存储位置服务器Session 客户端Cookie客户端全部存储状态性有状态服务器存储数据无状态数据编码在 Token 中安全性较高敏感数据在服务器中等Token 可能被篡改跨域支持差需特殊配置好Token 可放在 Header 中性能中等需查询服务高无需查询服务器失效控制容易删除 Session困难需实现黑名单
http://www.sczhlp.com/news/214122/

相关文章:

  • 网站托管费网站制作哪种好
  • 做网站遇到竞争对手怎么办网站怎么申请怎么注册
  • 衡阳城乡建设部网站首页gif素材网站推荐
  • 南昌专业做网站公司哪家好怎样做中考成绩查询网站
  • 六枝网站建设网站怎样和首页做链接
  • 做网站好还是网店华为手机WordPress
  • 金融行业高端网站制作国家住房和城乡建设局网站
  • 网站建设报表明细建设工程规划许可证查询网站
  • 服装工厂做网站的好处wordpress安装主题主机名
  • 做网站的目的是啥广东网站建设发信息
  • 开发微网站考研培训班哪个机构比较好
  • 广州做网站优化公司报价wordpress 阅读主题
  • 网站备案下来以后怎么做网页wordpress主题怎么修改页脚
  • Hands on Deep Learning Chapter 3 线性神经网络
  • 超越技术范畴:低代码如何重塑企业数字文化
  • 做算命网站怎样优化自己的网站
  • 网站建设电商学堂长沙做网站
  • 网站建设情况的自查报告兵团建设环保局门户网站
  • 做网站wamp和xamp初中毕业怎么样提升学历
  • 太原模板建站平台郑州网站营销汉狮
  • 怎么制作网站店铺成都工商注册咨询电话
  • 制作网站软件作品视频音乐网站怎样建设
  • 南京网络推广建站湖南建筑行业
  • 上海网站建设沪icp备如何加强网站建设和信息宣传
  • 做网站要学的教程网站建设与维护难不难
  • 网站是怎么做新手引导sql数据库添加网站
  • 男女做爰视频网站文库网站开发建设
  • 网站建设格局做传销网站违法的吗
  • 自助建个人网站哪个好创建一个网站的步骤
  • 兰州市七里河建设局网站天津团购鲜花的网站建设