Egg 設置與獲取Session

Session是另一種記錄客戶狀態的機制,不同的是 cookie 保存在客戶端瀏覽器中,而session 保存在服務器上。

當瀏覽器訪問服務器併發送第一次請求時,服務器端會創建一個 session 對象,生成一個類似於 key,value 的鍵值對, 然後將 key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時,攜帶 key(cookie),找到對應的 session(value)。
 
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 數據放在服務器上。

2. cookie相比 session 沒有 session 安全,別人可以分析存放在本地的cookie並進行cookie欺騙。
 
3. session會在一定時間內保存在服務器上,訪問增多時會比較佔用服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。
 
4. 單個cookie保存的數據不能超過 4K,很多瀏覽器都限制一個站點最多保存 20 cookie

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章