Session是另一種記錄客戶狀態的機制,不同的是 cookie 保存在客戶端瀏覽器中,而session 保存在服務器上。
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
// 設置session信息
this.ctx.session.userInfo = {
name: 'Augus',
age: 18
}
// 設置session的過期時間(不建議用這樣的方式,建議在config中設置)
// this.ctx.session.maxAge=5000;
await this.ctx.render('home');
}
}
module.exports = HomeController;
Session的配置和cookie基本是一樣的,可以使用cookie裏面的配置,配置選項在官網有非常全面的介紹,常見的配置選項如下:
// config.default.js
'use strict';
module.exports = appInfo => {
const config = exports = {};
// use for cookie sign key, should change to your own and keep security
config.keys = appInfo.name + '_1532511512428_3477';
// 配置session
config.session = {
// 設置session cookie裏面的key
key: 'SESSION_ID',
// 設置最大的過期時間
maxAge: 30 * 1000 * 60,
// 設置是否只服務端可以訪問
httpOnly: true,
// 設置是否加密
encrypt: true,
// 設置爲true每次刷新頁面的時候session都會被延期
renew: true
}
// 配置模板引擎
config.view = {
mapping: {
'.html': 'ejs',
},
};
return config;
};
Session的獲取代碼如下:
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
async index() {
// 獲取session的信息
var userInfo = this.ctx.session.userInfo;
// 將用戶的信息渲染到模板文件上面
await this.ctx.render('news', {
userInfo: userInfo
});
}
}
module.exports = NewsController;
Cookie 和 Session 區別如下:
1. cookie數據存放在客戶的瀏覽器上,session 數據放在服務器上。