Express中的cookie与session实战

0 下载量 110 浏览量 更新于2024-08-28 收藏 101KB PDF 举报
"本文主要探讨了在Express框架中如何使用cookie和session,涵盖了它们的设置、获取以及各自的优缺点。" 在Web开发中,HTTP协议的无状态特性使得服务器无法识别多次请求来自同一用户,为了解决这个问题,诞生了cookie和session技术。Express作为Node.js的主流Web开发框架,提供了便捷的方式来处理cookie和session。 1. Cookie - 设置Cookie: 在Express中,我们可以通过`res.cookie()`方法来设置cookie。例如,以下代码会设置名为"name"的cookie,其值为"why",并设置最大生存时间为2分钟,同时启用httpOnly选项,防止JavaScript访问该cookie: ```javascript app.get('/', (req, res) => { res.cookie('name', 'why', { maxAge: 2 * 60 * 1000, httpOnly: true }); res.send('首页'); }); ``` - 获取Cookie: 服务器可以从请求头`req.headers.cookie`中获取到cookie,但需要注意的是,这个值是字符串形式,可能需要进一步解析为对象。 - 第三方模块处理Cookie: 为了更方便地处理cookie,可以使用`cookie-parser`中间件。首先通过`npm install cookie-parser`安装,然后引入并使用: ```javascript const cookieParser = require('cookie-parser'); app.use(cookieParser()); ``` 这样,服务器就能正确解析请求中的cookie信息。 2. Session - 配置Session: Express中使用session通常需要中间件如`express-session`。首先安装`npm install express-session`,然后配置中间件: ```javascript const session = require('express-session'); app.use(session({ secret: 'your_secret_key', resave: false, saveUninitialized: true, cookie: { secure: false } // 如果在HTTPS环境下,设为true })); ``` - 设置Session: 可以在路由处理函数中使用`req.session`对象来设置session值: ```javascript app.get('/setSession', (req, res) => { req.session.user = 'username'; res.send('Session已设置'); }); ``` - 获取Session: 同样,可以通过`req.session`来获取session信息: ```javascript app.get('/getSession', (req, res) => { const user = req.session.user; res.send(`当前用户是:${user}`); }); ``` Cookie与Session的优缺点: - Cookie优点:轻量级,每个cookie大小限制在4KB内,适合存储少量信息。可跨域。 - Cookie缺点:安全性较低,因为cookie包含在HTTP请求中,容易被截获。数量和大小有限制。 - Session优点:安全性相对较高,数据存储在服务器端,不易被窃取。存储空间相对较大。 - Session缺点:需要服务器存储和管理,增加了服务器负担。不支持跨域。 在实际应用中,根据需求选择合适的身份验证和会话管理策略。例如,敏感信息通常存储在session中,而一些非敏感的用户偏好可能使用cookie记录。结合使用cookie和session,可以在保证安全的同时提供良好的用户体验。