koa-session 记录当前会话内容
最近做毕设需要在nodejs服务器下记录当前用户账号,所用的node框架是koa,所以相对应配套的用了koa-session,发现和之前学的session差不多,都是会话级别的。
一、session和token的区别
1、session鉴权流程
(1)用户登录的时候,服务端生成一个会话和一个id标识
(2)会话id在客户端和服务端之间通过cookie进行传输
(3)服务端通过会话id可以获取到会话相关的信息,然后对客户端的请求进行响应;如果找不到有效的会话,那么认为用户是未登陆状态
(4)会话会有过期时间,也可以通过一些操作(比如登出)来主动删除
2、token鉴权流程
(1)用户登录的时候,服务端生成一个token返回给客户端
(2)客户端后续的请求都带上这个token
(3)服务端解析token获取用户信息,并响应用户的请求
(4)token会有过期时间,客户端登出的时候也会废弃token,但是服务端不需要任何操作
3、两者区别
(1)session要求服务端存储信息,并且根据id能够检索,而token不需要。在大规模系统中,对每个请求都检索会话信息可能是一个复杂和耗时的过程。但另外一方面服务端要通过token来解析用户身份也需要定义好相应的协议。
(2)session一般通过cookie来交互,而token方式更加灵活,可以是cookie,也可以是其他header,也可以放在请求的内容中。不使用cookie可以带来跨域上的便利性。
(3)token的生成方式更加多样化,可以由第三方服务来提供
二、koa-session 使用方法
(1)首先在node环境下安装koa-session
npm install --save koa-session
(2)在app.js文件下引入koa-session
const session = require('koa-session');
(3)初始化koa-session
1 app.keys = ['some secret hurr'];
2 const CONFIG = {
3 key: 'koa:sess',
4 maxAge: 86400000, //失效时间,默认是一天。
5 overwrite: true,
6 httpOnly: true, //表示是否可以通过javascript来修改,设成true会更加安全
7 signed: true, //这个涉及到cookie的安全性
8 rolling: false, //是涉及到cookie有效期的更新策略
9 renew: false, //是涉及到cookie有效期的更新策略
10 };
11 app.use(session(CONFIG, app));
(4)在登录成功后记录当前账号
ctx.session.id = req_data.id; //设置session id
token和session的区别参考简书地址:https://www.jianshu.com/p/8f4cc45d712e