session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。
cookie的链接: 开始一个koa2 --3--cookie存储数据
1.工作流程:
- 用户登录,后台生成一个会话session对象(key,value键值对),session对象保存在数据库中;
- 向前端发送key,前端通过cookie保存key;
- 前端每次与后台通信时都发送key,后台通过key检索会话相关的信息,以此响应前端;
- 但是如果找不到有效的会话,那么认为用户是未登陆状态;
- 会话会有过期时间,也可以通过一些操作(比如登出)来主动删除
2.安装:
koa2 原生功能只提供了cookie的操作,但是没有提供session操作.需要安装第三方中间件;
- koa-session-minimal 适用于koa2 的session中间件,提供存储介质的读写接口 。
- koa-mysql-session 为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。
- 将sessionId的数据存到数据库
npm install koa-mysql-session koa-session-minimal --save
const session = require('koa-session-minimal')
const MysqlSession = require('koa-mysql-session')
let store=new MysqlSession(config.mysql_config);
// 使用session中间件
app.use(session({
key: 'SESSION_ID',
store: store,
cookie: cookie
}))
app.use( async ( ctx ) => {
// 设置session
if ( ctx.url === '/set' ) {
ctx.session = {
user_id: Math.random().toString(36).substr(2),
count: 0
}
ctx.body = ctx.session
} else if ( ctx.url === '/' ) {
// 读取session信息
ctx.session.count = ctx.session.count + 1
ctx.body = ctx.session
}
})
第一次访问;
首次建立会话,只有response headers中有cookie.
第二次访问;
浏览器显示 {"count":1}
第二次建立会话,request headers中也有cookie
服务器中生成了一个表;
Koa中Cookie和Session区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。