当我使用不同的快速会话版本尝试以下示例时遇到问题。
使用快递会话1.0.2
:
var connect = require('express'),
cookieParser = require('cookie-parser'),
session = require('express-session');
var app = connect();
app.use(cookieParser())
.use(session({secret:'sessionsecret',cookie:{maxAge:60000}}))
.use(function(req,res,next){
if(req.session.views){
res.setHeader('Content-Type','text/html');
res.write('<p>views ' + req.session.views + '</p>');
//Here
res.end();
req.session.views++;
}
else {
req.session.views = 1;
res.end('welcome to the demoe. Try refresh this page');
}
})
.listen(3000);
这有效;刷新页面时,视图计数器不断增加。
但是,当我将快速会话更改为1.8.2
(最新)时,该代码将停止工作,并且视图计数器保持为1.但在我将代码修改为以下后,它再次起作用:
var connect = require('express'),
cookieParser = require('cookie-parser'),
session = require('express-session');
var app = connect();
app.use(cookieParser())
.use(session({secret:'sessionsecret',cookie:{maxAge:60000}}))
.use(function(req,res,next){
if(req.session.views){
res.setHeader('Content-Type','text/html');
res.write('<p>views ' + req.session.views + '</p>');
//Here
req.session.views++;
res.end();
}
else {
req.session.views = 1;
res.end('welcome to the demoe. Try refresh this page');
}
})
.listen(3000);
在新的快速会话中发送响应之前,会话数据似乎正在保存。有人可以解释一下吗?
答案 0 :(得分:1)
是的,ExpressJS sessions无法在调用req.session
后保存res.end()
对象 - 或者发送任何内容数据。
这样做的原因是因为只能在发送标题时设置cookie(因此只能保存会话);在发送标题(并发送内容)之后,无法重置cookie并且无法保存会话。
您可以在行动here中看到代码。