一、Koa-Session简单介绍
session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。
二、Session的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的session(value)。 客户的信息都保存在session中
三、koa-session的使用:
1.安装 koa-session
npm install koa-session --save
2.引入express-session
const session = require('koa-session');
3.设置官方文档提供的中间件
const session_signed_key = ["some secret hurr"]; // 这个是配合signed属性的签名key
const session_config = {
key: 'koa:sess', /** cookie的key。 (默认是 koa:sess) */
maxAge: 4000, /** session 过期时间,以毫秒ms为单位计算 。*/
autoCommit: true, /** 自动提交到响应头。(默认是 true) */
overwrite: true, /** 是否允许重写 。(默认是 true) */
httpOnly: true, /** 是否设置HttpOnly,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 (默认 true) */
signed: true, /** 是否签名。(默认是 true) */
rolling: true, /** 是否每次响应时刷新Session的有效期。(默认是 false) */
renew: false, /** 是否在Session快过期时刷新Session的有效期。(默认是 false) */
};
我们需要关注这几个配置:
renew rolling
这两个都可以在用户访问的过程中刷新有效期,不至于让用户访问过程中Session过期成为未登录状态signed
这个是对客户端Cookie的签名,也就是用一个特点的字符加密,保证客户端Cookie不会被伪造出来httpOnly
打开这个使得通过程序(JS脚本、Applet等)无法读取Cookie,大大提高了安全性maxAge
以ms为单位的过期时间
4.使用
设置值 ctx.session.username = "张三";
获取值 ctx.session.username
四、Koa中Cookie和Session区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。