快速会话未保留其数据

时间:2019-06-20 15:56:21

标签: node.js express express-session

我有一个现代的网络应用程序,并且正在使用快速会话。问题是,当我尝试在其他路线上检索cookie数据时,没有得到保存。它已设置并在同一条路由上正确输出,但是当我转到另一条路由并尝试检索会话数据时,它将返回undefined

奇怪的是,该会话确实存储在mongodb中,但我无法检索它。

我在做什么错,我该如何解决?

以下是相关代码:

Session.js

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');

module.exports = function(app) {
    var sess = {
        secret: 'mySecret',
        cookie: { token: null },
        saveUninitialized: false,
        resave: true,
        store: new MongoStore({ mongooseConnection: mongoose.connection })
    };

    if (app.get('env') === 'production') {
        app.set('trust proxy', 1);
        sess.cookie.secure = true;
    }

    app.use(session(sess));
};

Route.js

module.exports = function(app) {
    app.use(cors());
    app.use(helmet());
    require('../middleware/session')(app);
    // Other routes...
};

文件1

router.post('/', async (req, res) => {
    req.session.token = 'hello';
    console.log(req.session.token); // Outputs 'hello'
    res.send(req.session.token);
});

文件2 ,该文件在页面重新加载后被调用

router.get('/me', async (req, res) => {
    console.log(req.session.token); // Outputs undefined
    console.log(req.session);
// Outputs: "Session {
// cookie: { path: '/',                                                    
// _expires:null,
// originalMaxAge: null,
// httpOnly: true }
// }

    res.send(req.session.token);
});

1 个答案:

答案 0 :(得分:0)

您应该在app.js文件中添加以下代码

var cookieParser = require('cookie-parser');
var session = require('express-session');

app.use(cookieParser());
app.use(session({secret: "Funny secret"}));

这是简单的方法。然后,您可以为 req.session 对象分配和访问值。