Egg.js 中 Session 的使用
一、 Session简单介绍
session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。
二、 Session的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一 个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再 访问时,携带 key(cookie),找到对应的 session(value)。
三、 Egg.js中session的使用:
egg.js 中 session 基于 egg-session 内置了对 session 的操作
设置:
this.ctx.session.userinfo={ name:'张三',
age:'20' }
获取:
var userinfo=this.ctx.session
Session 的默认设置:
exports.session = { key: 'EGG_SESS', maxAge: 24 * 3600 * 1000, // 1 day httpOnly: true, encrypt: true };
四、 Session在config.default.js中的配置
config.session={ key:'SESSION_ID', maxAge:864000, renew: true //延长会话有效期 }
五、 Cookie和Session区别
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 相比 session 没有 session 安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE欺骗。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 COOKIE。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
demo :
home.js控制器
'use strict'; const Controller = require('egg').Controller; class HomeController extends Controller { async index() { //设置session this.ctx.session.username='张三'; this.ctx.session.userinfo={ name:'李四', age:20 } //设置session的过期时间 修改session的默认参数 不建议用这样的方式 // this.ctx.session.maxAge=5000; await this.ctx.render('home'); } } module.exports = HomeController;
new,js 控制器
'use strict'; const Controller = require('egg').Controller; class NewsController extends Controller { async index() { var username=this.ctx.session.username; var userinfo=this.ctx.session.userinfo; //设置session的过期时间 修改session的默认参数 不建议用这样的方式 // this.ctx.session.maxAge=5000; console.log(userinfo); await this.ctx.render('news',{ username:username }); } } module.exports = NewsController;
config.default.js
'use strict'; module.exports = appInfo => { const config = exports = {}; //配置session session的配置和cookie基本是一样的,可以使用cookie里面的配置 config.session={ key:'SESSION_ID', //设置session cookie里面的key maxAge:30*1000*60, httpOnly:true, encrypt:true, renew:true //renew等于true 那么每次刷新页面的时候 session都会被延期 } // add your config here config.middleware = []; //配置模板引擎 config.view = { mapping: { '.html': 'ejs', }, }; return config; };
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
posted on 2020-06-11 16:18 LoaderMan 阅读(1994) 评论(0) 编辑 收藏 举报