【问题标题】:Node.js Express disable automatic session creationNode.js Express 禁用自动会话创建
【发布时间】:2014-01-23 04:29:30
【问题描述】:

如果我通过app.use(express.session({secret: "12345"})); 启用 express 的会话功能,会话 cookie 会在用户第一次点击页面时设置。

如何禁用此行为并手动决定何时创建 cookie,例如在成功登录后?我知道我可以手动构建一个 cookie-header,但我想继续使用 express.session。

【问题讨论】:

  • 这将非常棘手且容易出错。你能告诉我你为什么想要那个吗?
  • 显然不仅在客户端创建了一个cookie,而且只有在服务器端分配的资源。我认为如果用户从不登录,避免后者是个好主意,那是永远不需要会话。我的意思是,如果您不期望有很多访客,它可能会被忽略。我只是不喜欢我的内存或数据库存储被“污染”的想法。有什么我没看到的吗?
  • 大型网站会将静态数据移动到其他域,所以大部分请求不会创建会话,例如static1.yourdomain.com/image/i1.jpg不会创建会话。在express 中,您可以将app.use(express.static(...)) 移动到其他中间件的顶部,这样cookie 和会话中间件将不会针对静态请求运行。
  • 我已经在这样做了,它大大减少了创建的永远不会使用的会话数量,但不会为零,因此不能称为解决方案。我可以在 sotrage 中(不是在客户端)指定会话条目的到期日期吗?

标签: javascript node.js session cookies express


【解决方案1】:

我不确定最初发布此问题时是否存在此选项,但我可以将 saveUninitialized 选项设置为 false 来执行此操作。

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

【讨论】:

    【解决方案2】:

    将会话支持定义为中间件,但不要使用use

    var sessions = express.session({
        // etc
    });
    
    ...
    
    app.get('/', function (req, resp) {
        // No session
    });
    
    app.post('/user', sessions, function (req, resp) {
        // Has sessions
    

    【讨论】:

      【解决方案3】:

      假设你有一个登录方法......我假设你可以这样做。

      var sessionMW = express.session({secret:"12345"});
      
      function login(req, res, next){
          //...
          if(success){
              return expressMW(req, res, next);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        • 2018-06-28
        • 2021-10-07
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        相关资源
        最近更新 更多