【问题标题】:Express Session : terminate session on tab/browser close快速会话:在选项卡/浏览器关闭时终止会话
【发布时间】:2018-07-27 06:31:17
【问题描述】:

当用户关闭浏览器或选项卡时,我需要终止用户会话或注销用户。 以下是为维护会话而实现的代码:

app.use(session({
  store: new RedisStore({
    url: REDIS_CONNECTION_URL,
  }),
  secret: 'COOKIE_SECRET', 
  name: 'COOKIE_NAME',
  resave: true, 
  saveUninitialized: false,
  rolling: true,
  cookie: {
    path: '/',
    httpOnly: true,
    maxAge: 'COOKIE_TIMEOUT',
  },
}));

我尝试将 cookie.expires 设置为 true,但这没有帮助。

【问题讨论】:

    标签: node.js passport-local express-session node-redis


    【解决方案1】:

    您必须处理客户端用户的onclose 事件,然后调用http 请求在服务器端销毁客户端的会话。

    客户端:

    $(window).unload(function () { 
      $.get('/session/destroy');
    });
    

    服务器端:

    app.get('/session/destroy', function(req, res) {
        req.session.destroy();
        res.status(200).send('ok');
    });
    

    【讨论】:

    • 根据文档,即使在页面重新加载时也会触发卸载事件,这对我不起作用
    • @Sujit 简单的答案是否定的——浏览器的安全模型不允许您明确检测用户选择以何种方式离开您的页面(刷新/关闭/内部链接/外部链接)。这篇文章或许能帮到你webkul.com/blog/…
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2015-04-23
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多