req.session в экспресс-сеансе не сохраняется

У меня есть следующий код:

var express = require('express');
var cookieParser = require('cookie-parser');
var http = require('http')
var app = express();
app.use(cookieParser());
var session = require('express-session');
app.use(session({
    resave: false,
    saveUninitialized: true,
    secret: 'sdlfjljrowuroweu',
    cookie: { secure: true }
}));

app.get('/test', test);
function test(req, res) {
    var sess = req.session;
    console.log('before', sess);
    if (sess.views) {
        sess.views++
        req.session.save();
        res.setHeader('Content-Type', 'text/html')
        res.write('<p>views: ' + sess.views + '</p>')
        res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>')
        res.end();
    } else {
        sess.views = 1;
        req.session.save();
        res.end('welcome to the session demo. refresh!')
    }
    console.log('after', sess);
    return;
}

var server = http.createServer(app);
server.listen(8181);

И перезагружая страницу, я просто продолжаю получать сообщение о количестве просмотров 0.

Проверяя консоль, это вывод каждый раз:

before { cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: true } }
after { cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: true },
  views: 1 }

Так что вроде не спасает


person RobKohr    schedule 28.01.2016    source источник
comment
Вы используете защищенное соединение? aka https://, я подозреваю, что это не так, но вы установили флаг secure в значение true внутри своего express.session(...), что означает, что вы никогда не сможете получить доступ к файлу cookie (поэтому сеансы не будут работать правильно).   -  person Ash    schedule 28.01.2016


Ответы (1)


Изменить cookie: { secure: true } на cookie: { secure: false }

использование флага secure означает, что cookie будет установлен только на HTTPS.

person doron aviguy    schedule 28.01.2016
comment
Спасибо, что скопировали мой комментарий в ответ. - person Ash; 28.01.2016
comment
я не видела твой комментарий - person doron aviguy; 28.01.2016
comment
Да, это была причина. Спасибо вам обоим! - person RobKohr; 29.01.2016
comment
Спасибо!! такая же проблема уже несколько дней - person duatis; 28.07.2016
comment
Это действительно проблема, однако можно реализовать cookie: { secure: app.get('env') === 'production' }, чтобы SSL требовался только при запуске приложения. - person Paul Razvan Berg; 28.03.2018
comment
Это просто спасло мою задницу ----------------------- ` cookie: {secure: process.env.NODE_ENV ? правда : ложь,` - person decoder7283; 29.03.2018