开始一个koa2 -(4)-session

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
  }

})

第一次访问; 

开始一个koa2 -(4)-session_第1张图片

首次建立会话,只有response headers中有cookie. 

开始一个koa2 -(4)-session_第2张图片

第二次访问;

浏览器显示  {"count":1}

第二次建立会话,request headers中也有cookie

开始一个koa2 -(4)-session_第3张图片

服务器中生成了一个表;

开始一个koa2 -(4)-session_第4张图片

Koa中Cookie和Session区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

你可能感兴趣的:(koa2,node)