为什么connect-mongo为每个请求创build新的会话?

我有两个nodejs服务器(networking服务器,套接字服务器),通过socket.io互相连接。 在Web服务上,我使用express.js和passport.js作为身份validation中间件。

这是我的networking服务器configuration:

var express = require('express'), mongo = require('mongodb'), io = require('socket.io'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy, MongoStore = require('connect-mongo')(express); app.configure(function () { app.use(express.cookieParser()); app.use(express.methodOverride()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ db: 'MyDatabase' }) })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(express.static(__dirname + '/htdocs')); }); 

当我使用connect-mongo时,它为每个http请求创build一个新的会话。

这个元素创buildlogin请求:

 { "_id" : "UCnXade6Bk6ofOZ+jiEgzyH8", "session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}", "expires" : new Date("7.3.2014 19:07:45") } 

这个元素创build每次,当我按下F5,或采取sockets。

 { "_id" : "JhypbYFtj1CGOK/ylMhG8+Yk", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}", "expires" : new Date("21.3.2013 19:03:38") } 

当Web服务器使用套接字连接时,connect-mongo创build新的会话。 每分钟有大约50个新文件。

可能是什么原因?

UPDATE

在更新页面的情况下,帮助提示添加app.use(express.favicon())

用套接字问题仍然是实际的。

我的套接字服务器代码

 function sendPortalJSON (portal_id, data, _event) { https.get({ host : ...., port : ...., path : "/" + _event + "?data=" + encodeURIComponent( JSON.stringify (data)) }).on('error', function (err) { }); } ... sendPortalJSON(1, agent_data[i].d, "cpu-details"); 

在networking服务器上:

 app.get('/cpu-details', function (req, res) { }); 

       

网上收集的解决方案 "为什么connect-mongo为每个请求创build新的会话?"

首先,尝试将静态中间件移到会话中间件之前。 此外,一些浏览器处理/favicon.ico的请求有点时髦,所以请尝试使用express.favicon() ,看看它是否能解决您的问题。

所以像这样的东西:

 ... app.use(express.favicon()); app.use(express.static(__dirname + '/htdocs')); app.use(express.session({...}); ...