首页 文章

Express.js会话未定义 . Redis的

提问于
浏览
1

尝试使用Redis设置会话 . 我将我的Redis数据库放在一个dokku容器中,链接到我的应用程序(也在dokku容器中) . 我一直没有定义会话 . 我已经把事情剥离到最低限度,还检查了运行顺序 . 我仍然得到一个未定义的 .

我在这里读到'session' is undefined when using express / redis for session storeExpress js session undefined无济于事 .

我不应该使用cookie-parser,因为表达式会话中包含cookie,而文档说cookie-parser会导致表达式会话出现问题 .

var express = require('express');
var session = require('express-session');
var redisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');

var app = express();

app.set('port', (process.env.PORT || 5000));

var redisURL =  'redis://xxxxx:1234567@bar-redis-foo:6379';
var store = new redisStore({ url: redisURL });

app.use(session({
    secret: 'ssshhhhh',
    store: store,
    saveUninitialized: true,
    resave: true
}));


app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
    extended: true
}));

app.get('/', function(req, res, next) {
    console.log(req.session); // Logs Undefined
    res.send('Hello');
});

1 回答

  • 3

    检查您的redis连接并再次运行 . 示例代码如下 .

    "use strict";
    
    const express = require("express");
    const bodyParser = require("body-parser");
    const session = require("express-session");
    const RedisStore = require("connect-redis")(session);
    
    const app = express();
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    
    app.use(session({
        secret: "$kx(Fj$uB!Ug!@jCkguFmc6f7t<c-e$9",
        resave: false,
        saveUninitialized: true,
        store: new RedisStore({
            url: "redis://:********@pub-redis-12766.eu-central-1-1.1.ec2.redislabs.com:12766",
            ttl: 5 * 60 // 5 minute (Session store time)
        })
    }));
    
    app.use(function (request, response, next) {
        let path = request.originalUrl;
    
        if (request.session.user) {
            request.session.reload(function (err) { //session expire time regenerate
                if (!err) {
                    next();
                } else {
                    response.redirect('/login');
                }
            });
        } else {
            if (path == '/login') {
                next();
            } else {
                response.redirect('/login');
            }
        }
    });
    
    app.get('/', function(request, response) {
        if (request.session.user) {
            response.send(request.session.user);
        } else {
            response.redirect("/login");
        }
    });
    
    app.get('/login', function(request, response) {
        if (request.session.user) {
            response.redirect("/");
        } else {
            request.session.user = {username: "halil"}; //custom key {user} and custom data {username: "halil"}
        }
    
        response.send('Login');
    });
    
    app.get('/logout', function(request, response) {
        if (request.session.user) {
            request.session.destroy();
            response.redirect("/login");
        } else {
            response.redirect("/login");
        }
    });
    
    app.listen(app.get('port'), function () {
        console.log('App is working on port: ' + app.get('port'));
    });
    

相关问题