一、Session 简单介绍
二、Session 的工作流程
三、koa-session 的使用:
1.安装 koa-session
npm install koa-session --save
2.引入 koa-session
const session = require('koa-session');
3.设置官方文档提供的中间件
app.keys = ['some secret hurr']; const CONFIG = { key: 'koa:sess', //cookie key (default is koa:sess) maxAge: 86400000, // cookie 的过期时间 maxAge in ms (default is 1 days) overwrite: true, //是否可以 overwrite (默认 default true) httpOnly: true, //cookie 是否只有服务器端可以访问 httpOnly or not (default true) signed: true, //签名默认 true rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false) renew: false, //(boolean) renew session when session is nearly expired, }; app.use(session(CONFIG, app));
4.使用
设置值 ctx.session.username = "张三"; 获取值 ctx.session.username
Cookie 和 Session 区别
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 COOKIE。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
demo
/* 1.npm install koa-session --save 2、const session = require('koa-session'); 3、 app.keys = ['some secret hurr']; const CONFIG = { key: 'koa:sess', maxAge: 86400000, overwrite: true, httpOnly: true, signed: true, rolling: false, renew: false, }; app.use(session(CONFIG, app)); 设置 session ctx.session.username = "张三" 获取 session ctx.session.username * */ var Koa=require('koa'), router = require('koa-router')(), render = require('koa-art-template'), path=require('path'), session = require('koa-session'); var app=new Koa(); //配置 koa-art-template模板引擎 render(app, { root: path.join(__dirname, 'views'), // 视图的位置 extname: '.html', // 后缀名 debug: process.env.NODE_ENV !== 'production' //是否开启调试模式 }); //配置session的中间件 app.keys = ['some secret hurr']; /*cookie的签名*/ const CONFIG = { key: 'koa:sess', /** 默认 */ maxAge: 10000, /* cookie的过期时间 【需要修改】 */ overwrite: true, /** (boolean) can overwrite or not (default true) 没有效果,默认 */ httpOnly: true, /** true表示只有服务器端可以获取cookie */ signed: true, /** 默认 签名 */ rolling: true, /** 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false) 【需要修改】 */ renew: false, /** (boolean) renew session when session is nearly expired 【需要修改】*/ }; app.use(session(CONFIG, app)); router.get('/',async (ctx)=>{ //获取session console.log(ctx.session.userinfo); await ctx.render('index',{ list:{ name:'张三' } }); }) router.get('/news',async (ctx)=>{ //获取session console.log(ctx.session.userinfo); ctx.body="登录成功"; }) router.get('/login',async (ctx)=>{ //设置session ctx.session.userinfo='张三'; ctx.body="登录成功"; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);