节点JS会话不持久

时间:2016-03-11 16:54:05

标签: java node.js session

我在NodeJS中设置用户会话时有点噩梦。我已经搜索了它的生命,并在这里阅读了大量的文章,但没有一个解决方案适合我。

我的设置:

app.use(cookieParser());
    app.use(session({
        pool: true,
        key: 'cgtracker.cookie',
        resave: false,
        saveUninitialized: false,
        secret: '1234567890QWERTY',
        cookie: {maxAge: 100000},
        store: new MySQLStore(options),
    }));

我正在使用MySQLStore(' express-mysql-session')。这与我的Db相关联,并且按预期工作。运行此 - >

router.post('/Login', function (req, res) {
        logger.log("info", "Attempting Login for user: " + req.body.Username);
        req.session.username = req.body.Username;
        res.send('Created session for: ' + req.body.Username);

在会话表中为有效期的会话创建一个条目。

| 2gbIWNuFVcE3GmjrFMEctdZlvBMufqiN | 1457713316 | {"cookie":{"originalMaxAge":100000,"expires":"2016-03-11T16:21:55.580Z","httpOnly":t                                                      rue,"path":"/"},"username":"chris.rayner"} 

我的问题是我无法在任何其他功能中检索任何会话。 这里有一个简单的测试:

router.get('/', function (req, res) {
        logger.log("info", "Current Session: " + JSON.stringify(req.session));
}

我收到:

Current Session: {\"cookie\":{\"originalMaxAge\":100000,\"expires\":\"2016-03-11T16:24:15.212Z\",\"httpOnly\":true,\"path\":\"/\"}}","timestamp":"2016-03-11T16:22:35.212Z"}`

我的会话数据在哪里?!

我觉得我错过了一些明显的东西,但是我已经尝试了很多研究变化我变得有点失落。

我的浏览器cookie构造正确,但该值似乎与会话表中存储的任何SessionID无关。

非常感谢任何帮助/想法/建议!

克里斯

1 个答案:

答案 0 :(得分:0)

找到了解决方案!

Chrome(可能是firefox,但未经过测试)默认情况下会在发布到"未知"域。客户端CORS中的一些安全功能......

修复此服务器端: - 更新具有授权来源的Cors供浏览器检查。

app.use(cors({ origin: config.origin, *(I am using an array for multiple allows origins)* credentials: true }));

修复此客户端: 将其添加到函数的POST标题中的选项。

xhrFields: { withCredentials: true }

将其添加到Model的构造函数中。

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) { options.xhrFields = { withCredentials: true }; });

此后,在POST中发出的Cookie成功请求" Stick"到浏览器和会话功能是一个去!

多么痛苦! 希望这个解决方案可以帮助别人节省他们项目的时间!