【问题标题】:Express 4 fire event on session ended会话结束时的 Express 4 火灾事件
【发布时间】:2015-06-18 06:06:56
【问题描述】:

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

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

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

【问题讨论】:

  • 即使您可以在会话结束时触发一些事件,您如何将其发送到视图。当客户端发出请求时,视图会被渲染。如果没有 Web 套接字,您将无法推送到客户端。
  • 这就是我想要弄清楚的,当会话结束时,你如何显示模式或其他东西?这可能是不可能的。
  • 您可以使用 Web 套接字或让您的客户端代码每隔一段时间轮询您的服务器以检查会话是否已结束。

标签: node.js express express-session


【解决方案1】:

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

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

【讨论】:

  • 对,所以这仍然需要刷新浏览器来检查 isInit 变量,这实际上是我已经采用的解决方案,我认为这与应用程序在网络上是一致的是你刷新并且会弹出一个模式,或者它会再次重定向到登录页面并显示一条消息“您的会话已超时”,谢谢!
  • 这需要一个新的请求是的。如果你想在不刷新的情况下检查这个客户端,你可以设置一个 cookie 客户端或向服务器询问 isInit 值(使用 websocket 或异步轮询)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多