NodeJS cookie不能在Express 4中使用会话

我已经将我的NodeJS应用程序更新到Express 4.0,现在除了快速会话cookie之外,我无法设置自己的Cookie。 这个问题只发生在任何会话的第一个请求,当用户重新加载页面的自定义cookie在那里。

var express = require('express'); var routes = require('./routes'); var http = require('http'); var path = require('path'); var session = require('express-session'); var app = express(); app.set('port', process.env.PORT || 3000); app.use(express.static(path.join(__dirname, 'public'))); app.use(require('body-parser')()); app.use(require('method-override')()); app.use(require('cookie-parser')('cookie-secret')); //app.use(session({ secret: 'secret', key: 'sid'})); //uncomment this to see the problem app.get('/', function(req, res, next) { res.cookie('testing', 'test'); //this isn't set if using 'app.use(session...)' res.send('This is a cookie test'); }); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

testing:1.运行上面的代码,将cookie“testing”发送到浏览器正确。 2.然后清除cookies并取消注释“app.use(session …”)3.运行应用程序,唯一的cookie是“sid”4.“重新加载”页面)和“testing”cookie在那里。

我的所有cookies都是在第一次请求时才有的。

       

网上收集的解决方案 "NodeJS cookie不能在Express 4中使用会话"

这适用于我:

 var mw = { favicon: require('static-favicon'), logger: require('morgan'), bodyParser: require('body-parser'), cookieParser: require('cookie-parser'), session: require('express-session'), methodOverride: require('method-override') }; var MongoStore = require('connect-mongo')(mw); app.store = new MongoStore(...); app.use(function(req, res, next) { if ('HEAD' === req.method || 'OPTIONS' === req.method) return next(); var writeHead = res.writeHead; res.writeHead = function() { res.cookie('XSRF-TOKEN', req.session && req.session._csrfSecret); writeHead.apply(res, arguments); }; next(); }); app.use(mw.session({ key: 'yourCookieID', cookie: { maxAge: 3600000 * 24 * 7 }, store: app.store })); 

express-session您正尝试使用由name: optionreplace的key: name:选项。 你会想使用genid:选项来设置sid ,确保它是唯一的(我build议,uuid版本4)。 express-session包也将处理您的cookiepipe理。

 // Session create var hour = 3600000; app.use(session({ genid: function(req) { return uuid.v4(); // This comes from the node-uuid package }, secret: 'secret key', cookie: { secure: true, expires: new Date(Date.now() + hour), maxAge: hour }, saveUninitialized: true, resave: true })); 

要访问会话数据:

 req.session 

要访问cookie数据:

 req.session.cookie 

这是一个已知的问题。 看到这个 GH问题。