为每个请求快速创建新会话

时间:2016-07-16 11:48:50

标签: node.js express express-session

Express-session正在为新请求创建新会话(新sessionID)。并且间歇性地发生,例如有时候前3-4次点击它会正常工作并继续使用相同的现有会话,并且在第4次点击它将创建一个新的,有时它将在第一个请求本身创建新会话。

此问题也出现在我的托管网站上。它在localhost上工作正常。

我已经尝试过但没有工作的东西..

  1. 在静态文件路由之后创建Express会话。
  2. 快递会话密码和cookieParser秘密设置为相同。
  3. app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));用于favicon。
  4. 在创建Cookie时为max-age字段设置非常高的值。
  5. 以下是我的app.js代码段 -

    var passport = require('passport');
    var expressSession = require('express-session');
    var app = express();
    app.engine('hbs', hbs.express4({
      partialsDir: __dirname + '/views/partials'
    }));
    app.set('view engine', 'hbs');
    app.set('views', path.join(__dirname, 'views'));
    app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    
    app.use(express.static(path.join(__dirname, 'public')));
    var flash = require('connect-flash');
    app.use(flash());
    
    var initPassport = require('./passport/init');
    initPassport(passport);
    //app.use(bodyParser.urlencoded());
    app.use(cookieParser('mysecret'));
    app.use(expressSession({ secret: 'mysecret', name:'user', cookie: {maxAge: 60000000}}));
    app.use(passport.initialize());
    app.use(passport.session());
    

    任何形式的帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

为什么不使用MongoStore存储会话数据?可能会解决你的问题。

 app.use(session({
     secret: 'mysecret',
     resave: false,
     saveUninitialized: false,
     expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
     cookie: {  } ,
     store: new MongoStore({mongooseConnection: mongoose.connection})
 }));

答案 1 :(得分:0)

对于那些登陆这里进行类似多会话创建的人,我通过在会话中间件中将此标志设置为 false 来解决我的问题。仅当您的 cookie 已使用一些附加数据(例如电子邮件)进行更新时,它才会将您的 cookie 保存在数据库中。 `

saveUninitialized: false