2

我正在为快速会话设置会话 cookie 的最大年龄

app.use(session({ secret: process.env.EXPRESS_SECRET, key: 'sid', cookie: {secure: false, maxAge: 3000} }));

如何使用事件发射器或 express 的自定义事件(内部带有事件发射器) - 在会话结束时触发事件并将数据发送到视图层?

4

1 回答 1

2

不确定我得到你想要实现的目标,但如果你想检查会话是否结束,你可以设置一个会话数据

if (req.session.isInit !== true) {
    // The session has been reinitialized
    // do something here
    req.session.isInit = true;
}

否则,您可以轻松实现自己的会话存储,它将继承您选择的存储(默认情况下,快速内存存储也继承 EventEmitter)并覆盖#destroy重置会话的方法:

var MemoryStore = session.MemoryStore;
var inherits = require('util').inherits;

var MyStore = function () {
    MemoryStore.call(this);
};
inherits(MyStore, MemoryStore);

MyStore.prototype.destroy = function (sid, fn) {
    this.emit('resetSession');
    MemoryStore.prototype.destroy.call(this, sid, fn);
};

var myStore = new MyStore();
myStore.on('resetSession', function () {
     // do something here
});
app.use(session({ store: new MyStore()secret: process.env.EXPRESS_SECRET, key: 'sid', cookie: {secure: false, maxAge: 3000} }));
于 2015-06-17T22:06:56.913 回答