Express教程06:Session(完结)
阅读更多系列文章请访问我的GitHub博客,示例代码请访问这里。
Session介绍
Session存储在服务器,但它并不独立使用,而是与Cookie或配合使用。
也就是说,在Cookie中存储了一个ID,服务端在接收到Cookie时对ID进行校验,只有通过校验才可以进行下一步处理,否则将让用户重新登录。
Session相对单纯的Cookie校验而言比较安全,但也有可能发生Session劫持。
使用cookie-session中间件操作Session
cookie-session介绍
cookie-session是常用来处理Session的中间件。为了保证安全性,它是强制加密的。
安装cookie-session
npm install cookie-session
使用cookie-session
示例代码:/lesson06/server.js
同其他中间件类似,cookie-session也只需要server.use方法调用,并传入配置即可:
server.use(cookieSession({ // 循环密钥,其中有若干个密钥。如果只有一个密钥,容易被客户端破解,多个密钥相对安全 keys: [ 'tVnVq4zDhDtQPGPrx2qSOSdmuYI24C', 'IUTEaA1wKoWnVDf4DspSBAjKvLWcyn', 'yC7cWHZDYoRMYawxSVDdzKQdXkZ9sE', 'Ikjk6OibzaBYiEM13Mrj8ITdb3DonG', 'uyajLZWgim4BS4SuQtH4kbTi640mWo', ], // 设置20分钟有效期,若Session丢失,过期后将无法再被使用 maxAge: 20 * 60 * 1000 })) 复制代码
使用中间件后,在接口中对Session进行操作:
// 在接口中操作Session server.get('/session', (req, res, next) => { console.log(`Session: ${JSON.stringify(req.session)}`) // 每次访问/session接口,就将Session中的number值加1 if (req.session.number) { req.session.number++ } else { req.session.number = 1 } // 存储用户ID req.session.id = 'lee' res.send(`Session: ${JSON.stringify(req.session)}`) }) 复制代码
在浏览器中访问http://localhost:8080/session,就可以看到在页面上打印出的Session值,如Session: {"number":1,"id":"lee"}。
在浏览器的控制台中可以看到保存在Cookie中的Session值:
express:sess: eyJudW1iZXIiOjEsImlkIjoibGVlIn0= // Session的值 express:sess.sig: 2wiwgJGBFBrNF4HuNSECtE39i8w // 对Session值的签名,用来保护Session不被篡改 复制代码
我们可以尝试在控制台中直接修改express:sess或express:sess.sig的值,刷新后Session会因为校验不通过而被重置。
服务端存储Session
通常在项目开发中,也需要将Session保存在服务端,便于进行校验。
此时可以使用JavaScript库如express-mysql-session,将Session保存在MySQL数据库中。
本文暂时没有评论,来添加一个吧(●'◡'●)