簡體   English   中英

使用Express-Session時,會話數據未保存到內存中

[英]Session data is not saving to memory while using express-session

當我嘗試使用不同的Express-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);

這有效; 刷新頁面時,視圖計數器不斷增加。 但是,當我將express-session更改為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);

在新的快速會話中發送響應之前,會話數據似乎已保存。 有人可以解釋嗎?

是的,在res.end()或發送任何內容數據后, ExpressJS會話無法保存req.session對象。

這樣做的原因是因為僅在發送標頭時才可以設置cookie(因此只能保存會話)。 發送標頭(和發送內容)后,將無法重置Cookie,也無法保存會話。

您可以在此處查看運行中的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM