【问题标题】:Express creating lots of sessions快速创建大量会话
【发布时间】:2017-09-20 15:07:20
【问题描述】:

我才意识到这一直在发生。

我的堆栈:

  • NodeJS
  • 快递
  • PassportJS
  • 角度
  • MongoDB 与 Mongoose

当我登录我的网站时,我看到集合 sessions 已创建,其中包含一条记录(正如人们所期望的那样)。然后,我浏览了网站,发现我的会话有 13 条记录。然后,我又浏览了一些,我发现它已经超过了 27 个。

世界上到底发生了什么?我是不是在做导致这种情况的事情?

我的主要 app.js 文件如下:

var config = require('./config/config.js');
var express = require('express');
var favicon = require('serve-favicon')
var app = express();
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var ConnectMongo = require('connect-mongo')(session);
var mongoose = require('mongoose').connect(config.dbURL);
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
var bodyParser = require('body-parser');

app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('hogan-express'));
app.set('view engine', 'html');
app.use(favicon(path.join(__dirname, 'public', '/images/favicon.ico')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(session({
    secret:config.sessionSecret,
    store: new ConnectMongo({
        mongooseConnection:mongoose.connections[0],
        stringigy:true,
        touchAfter: 24 * 3600
    }),
    saveUninitialized:true,
    resave:true
}));

app.use(session({secret:config.sessionSecret, saveUninitialized:true, resave:true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

require('./schemas/allSchemas.js')(mongoose);
require('./auth/passportAuth.js')(passport, FacebookStrategy, config, mongoose, moment);

//Main URL router
require('./routes/routes.js')(express, app, passport, mongoose);

app.listen(3000, function(){
    console.log('App is working on Port 3000');
});

我的每个会话都如下所示(如果有任何帮助的话):

{
"_id": "cSqLjOGJlYBvNLYJ8v6zXqtqzuIcGwbx",
"session": "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}",
"expires": "2017-10-10 22:46:09",
"lastModified": "2017-09-26 22:46:09"
}

【问题讨论】:

    标签: node.js session express


    【解决方案1】:

    试试这个

    var config = require('./config/config.js');
    var express = require('express');
    var favicon = require('serve-favicon')
    var app = express();
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var session = require('express-session');
    var ConnectMongo = require('connect-mongo')(session);
    var mongoose = require('mongoose').connect(config.dbURL);
    var passport = require('passport');
    var FacebookStrategy = require('passport-facebook').Strategy;
    var bodyParser = require('body-parser');
    
    app.set('views', path.join(__dirname, 'views'));
    app.engine('html', require('hogan-express'));
    app.set('view engine', 'html');
    app.use(favicon(path.join(__dirname, 'public', '/images/favicon.ico')));
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(cookieParser());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
    app.use(session({
        secret:config.sessionSecret,
        store: new ConnectMongo({
            mongooseConnection:mongoose.connections[0],
            stringigy:true,
            touchAfter: 24 * 3600
        }),
        saveUninitialized:true,
        resave:true
    }));
    
    app.use(passport.initialize());
    app.use(passport.session());
    
    
    require('./schemas/allSchemas.js')(mongoose);
    require('./auth/passportAuth.js')(passport, FacebookStrategy, config, mongoose, moment);
    
    //Main URL router
    require('./routes/routes.js')(express, app, passport, mongoose);
    
    app.listen(3000, function(){
        console.log('App is working on Port 3000');
    });

    【讨论】:

    • 我试了一下。不幸的是,情况并没有太大的不同。我浏览了该网站并返回了 15 多条记录。
    • 可能是db记录有问题 try (remove all cookie before) app.use(session({ secret:config.sessionSecret, })); app.use(passport.initialize()); app.use(passport.session());
    • 我确实在每次尝试进行调查之前将它们全部删除,并且也采用了您的方法。还有其他建议吗?谢谢
    • 您的代码看起来没问题,所以我猜问题出在您的 passportAuth 文件中,或者您安装了一些扩展程序导致您的 cookie 混乱尝试以隐身模式打开您的网站(谷歌浏览器)
    • 刚刚也尝试过隐身模式。还是一样。顺便说一句,我已经编辑了我的帖子以添加一个会话作为示例。也许我在那里遗漏了什么?如果你能看看,那将不胜感激。谢谢
    猜你喜欢
    • 2022-08-06
    • 2012-08-30
    • 1970-01-01
    • 2020-07-13
    • 2016-10-21
    • 2016-02-14
    • 2017-03-30
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多