【问题标题】:How to end a session in ExpressJS如何在 ExpressJS 中结束会话
【发布时间】:2011-07-31 04:53:33
【问题描述】:

我觉得这必须隐藏在文档中的某个地方,但我找不到它。

如何在 ExpressJS 中关闭、结束或终止(无论如何)会话?

【问题讨论】:

    标签: session node.js express


    【解决方案1】:

    没关系,我是req.session.destroy();

    【讨论】:

    • 这在 express 3 上对我不起作用。我正在尝试调用 ´req.session.destroy()´
    • 在 ExpressJS 3.00 上工作正常。像 acidghost 一样使用req.session.destroy();
    • 在 express 2.5 中使用 req.session.destroy() 也适用于我
    • 这是在哪里记录的?我正在寻找它。
    【解决方案2】:

    使用,

    delete req.session.yoursessionname;
    

    【讨论】:

    • 我真的很想看到一个关于这个的文件。
    • 对于所有反对@Nithin 的人; github (github.com/expressjs/session/blob/master/session/session.js) 上记录的 session.destroy() 函数方法使用“删除 this.req.session” - 这不完全是@Nithin 的答案,但是使用“删除”也是一个正确的解决方案(其他答案未涵盖)。
    • 这是正确的解决方案吗?没有内存泄漏,不会发生什么恶作剧吧?
    【解决方案3】:

    来自http://expressjs.com/api.html#cookieSession

    要清除 cookie,只需在响应之前将会话分配为 null:

    req.session = null
    

    【讨论】:

      【解决方案4】:

      该问题没有说明正在使用哪种类型的会话存储。两个答案似乎都是正确的。

      对于基于 cookie 的会话:

      来自http://expressjs.com/api.html#cookieSession

      req.session = null // Deletes the cookie.
      

      对于基于 Redis 等的会话:

      req.session.destroy // Deletes the session in the database.
      

      【讨论】:

      【解决方案5】:

      结束服务器端会话

      https://github.com/expressjs/session#sessiondestroycallback

      req.session.destory();
      

      注意,这本质上是对delete req.session 的封装,如源代码所示:

      https://github.com/expressjs/session/blob/master/session/session.js

      Session.prototype.destroy = function(fn){
        delete this.req.session;
        this.req.sessionStore.destroy(this.id, fn);
        return this;
      };
      

      结束 cookie 会话

      https://github.com/expressjs/cookie-session#destroying-a-session

      req.session = null;
      

      【讨论】:

        【解决方案6】:

        Express 4.x 更新答案

        会话处理不再内置于 Express 中。这个答案指的是标准会话模块:https://github.com/expressjs/session

        要清除会话数据,只需使用:

        req.session.destroy();
        

        文档在这方面有点没用。它说:

        销毁会话,删除req.session,下次请求会重新生成。 req.session.destroy(function(err) { // cannot access session here })

        意味着当前会话将在下一个请求时重新加载。这意味着下次请求时将在您的会话存储中创建一个干净的空会话。 (大概会话 ID 没有改变,但我没有测试过。)

        【讨论】:

        • 有没有办法从会话中销毁会话而不是立即请求。例如,如果我要实现让我退出所有设备功能,我将需要该功能
        • @MuhammadUmer 据我所知,没有用于销毁任意会话的内置机制。您可以通过从存储中删除与会话关联的密钥或创建自己的会话包装器来轻松实现这一点。
        【解决方案7】:

        正如在几个地方提到的,我也无法让 req.session.destroy() 函数正常工作。

        这是我的解决方法 .. 似乎可以解决问题,并且仍然允许使用 req.flash

        req.session = {};
        

        如果你删除或设置 req.session = null; ,那么你似乎不能使用 req.flash

        【讨论】:

        • 这是一个安全问题,因为它不会改变会话哈希
        【解决方案8】:
        req.session.destroy(); 
        

        以上对我不起作用,所以我这样做了。

        req.session.cookie.expires = new Date().getTime();
        

        通过将cookie的过期时间设置为当前时间,会话自行过期。

        【讨论】:

          【解决方案9】:

          Session.destroy(callback)

          销毁会话并取消设置 req.session 属性。完成后,将调用回调。

          安全方式 ↓ ✅

          req.session.destroy((err) => {
            res.redirect('/') // will always fire after session is destroyed
          })
          

          不安全的方式 ↓ ❌

          req.logout();
          res.redirect('/') // can be called before logout is done
          

          【讨论】:

          • 如果我有闪存怎么办,因为它会导致错误(这很明显)。 | UnhandledPromiseRejectionWarning:错误:req.flash() 需要会话
          • 在这种情况下,我认为您可以使用req.user = { }。我记得password.js 使用req.user 来跟踪登录用户。
          【解决方案10】:

          您可以使用req.session.idreq.sessionID 检索会话的ID,然后将其传递给req.sessionStore.destroy 方法,如下所示:

          const sessionID = req.session.id;
          req.sessionStore.destroy(sessionID, (err) => {
            // callback function. If an error occurs, it will be accessible here.
            if(err){
              return console.error(err)
            }
            console.log("The session has been destroyed!")
          })
          

          Reference to the req.sessionStore.destroy method.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多