使用快速会话时,会话数据不会保存到内存中

时间:2014-10-13 04:59:16

标签: node.js session

当我使用不同的快速会话版本尝试以下示例时遇到问题。

使用快递会话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);

在新的快速会话中发送响应之前,会话数据似乎正在保存。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

是的,ExpressJS sessions无法在调用req.session后保存res.end()对象 - 或者发送任何内容数据。

这样做的原因是因为只能在发送标题时设置cookie(因此只能保存会话);在发送标题(并发送内容)之后,无法重置cookie并且无法保存会话。

您可以在行动here中看到代码。