Ho due server nodejs (server Web, server socket), collegati tra loro da socket.io. Sul servizio web utilizzo express.js e passport.js come middleware di autenticazione.Perché connect-mongo crea una nuova sessione per ogni richiesta?
Questo è il mio config web-server:
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'));
});
Quando uso la connessione-mongo, si crea una nuova sessione per ogni http-request.
Questo elemento crea con accesso a richiesta:
{
"_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")
}
E questo elemento crea ogni volta, quando si preme F5, o fare presa.
{
"_id" : "JhypbYFtj1CGOK/ylMhG8+Yk",
"session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : new Date("21.3.2013 19:03:38")
}
Quando il server Web accetta la connessione socket, connect-mongo crea una nuova sessione. Ci sono circa 50 nuovi documenti al minuto.
Quale potrebbe essere il motivo?
UPDATE
Nel caso di aggiornamento della pagina, aiutati punta da aggiungere app.use(express.favicon())
.
Con le prese la domanda è ancora attuale.
Il mio codice socket server di
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");
E sul web-server:
app.get('/cpu-details', function (req, res) { });
Impressionante! Quando ho usato 'express.favicon()', tutto andava bene quando ho premuto F5. Ma quando ho avviato il mio server socket.io, connect-mongo continua a creare nuovi documenti. Ho aggiunto del codice del mio socket-server. – msmirnov
Assicurarsi di posizionare qualsiasi route o middleware che non devono essere gestiti dal passaporto e/o dal middleware di sessioni * prima di * quei middleware. Solo curioso, ma c'è un motivo per cui stai usando un server socket.io separato? È possibile combinare socket.io ed Express insieme in un'app server. – robertklep
Ho erroneamente detto. Я hanno due server nodejs e la connessione viene effettuata tra loro da socket.io. – msmirnov