Egg.js 中 Session 的使用

一、 Session简单介绍

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。

 

二、 Session的工作流程

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一 个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再 访问时,携带 key(cookie),找到对应的 session(value)。

 

三、 Egg.jssession的使用:

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
};

四、 Sessionconfig.default.js中的配置

config.session={ 
key:'SESSION_ID',
 maxAge:864000,
renew: true //延长会话有效期
}

五、 CookieSession区别

 

1cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2cookie 相比 session 没有 session 安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE
欺骗。
3session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 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编辑  收藏  举报

导航