Les sessions ne seront pas sauvegardées dans Node.js sans req.session.save ()

Je suis en train de construire un site web à l'aide de Node.js, Express, et Redis pour la gestion des sessions. Pour quelque raison que ce soit, si j'ai une variable de session (isLoggedIn dans cet exemple), et j'ai actualiser la page, la variable n'est pas d'être sauvés, cependant, si je l'appelle req.session.save() après la définition de la variable, il est enregistré à Redis (redis-cli moniteur montre ce - pas appeler save() montre que la variable n'est pas là, alors que l'appel de save() montre).

Je vais l'utiliser pour configurer et démarrer le serveur:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var swig = require('swig');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

//Configure the favicon first. This avoids other middleware from processing the request if we know the request is for the favicon.
app.use(favicon(__dirname + '/public/images/favicon.ico'));

//All other requests will require everything else.

//Set up the view engine.
app.set('view engine', 'html');
app.set('views', path.join(__dirname, '/views'));
app.engine('html', swig.renderFile);

//Set up our logger.
app.use(logger('dev'));

//Set up JSON parsing.
app.use(bodyParser.json());

//Set up encoded URL parsing.
app.use(bodyParser.urlencoded());

//Set up the cookie parser.
app.use(cookieParser('thedogsleepsatnight'));

//Set up our session store. This will use Redis as our session management.
app.use(session({
    resave: true,
    saveUninitialized: true,
    secret: "thedogsleepsatnight",
    store: new RedisStore()
}));

app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

Et puis, dans cette voie, j'ai:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    console.log(req.session.isLoggedIn);
    if (req.session.isLoggedIn) {
        console.log("Logged in!");
    } else {
        console.log("Not logged in");
    }

    res.render('index');
});

router.post('/login', function(req, res) {
    console.log("Going to set isLoggedIn. Currently: " + req.session.isLoggedIn);
    req.session.isLoggedIn = true;
    console.log("Set isLoggedIn. Currently: " + req.session.isLoggedIn);
});

module.exports = router;

De cela, je devrais être capable de naviguer à /loginont la séance isLoggedIn de vrai, et qui devrait enregistrer automatiquement à Redis. Après cela, à la tête de / devrait me dire que je suis connecté. Chargement /login ne définissez la variable, le deuxième journal indique que, mais le chargement de / dit que je ne suis pas connecté. redis-cli moniteur montre

1414076171.241836 "setex" "sess:FIDJ9qDbX_0u9pzlC6VZEW76zZcyiPME" "86400" "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}"

lors de l'enregistrement, qui ne comprend pas les isLoggedIn variable, mais en ajoutant dans req.session.save() montre:

1414076475.601644 "setex" "sess:FIDJ9qDbX_0u9pzlC6VZEW76zZcyiPME" "86400" "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"isLoggedIn\":true}"

La moindre idée de pourquoi j'ai appeler req.session.save() lorsque tous les exemples que j'ai vu ne l'utilise pas?

source d'informationauteur PuppyKevin | 2014-10-23