Node.js Express禁用自动会话创建

5
如果我通过app.use(express.session({secret: "12345"}));启用了express的会话功能,当用户第一次访问页面时,会话Cookie将被设置。
我该如何禁用这种行为并手动决定何时创建Cookie,例如在成功登录后?我知道我可以手动构造一个cookie头,但我想继续使用express.session。

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

2

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

var sessions = express.session({
    // etc
});

...

app.get('/', function (req, resp) {
    // No session
});

app.post('/user', sessions, function (req, resp) {
    // Has sessions

2

0
假设你有一个登录方法...我猜想你可以这样做。
var sessionMW = express.session({secret:"12345"});

function login(req, res, next){
    //...
    if(success){
        return expressMW(req, res, next);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接