我在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无关。
非常感谢任何帮助/想法/建议!
克里斯
答案 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"到浏览器和会话功能是一个去!
多么痛苦! 希望这个解决方案可以帮助别人节省他们项目的时间!