java - Node JS session 不持久

标签 java node.js session

我在 NodeJS 中设置用户 session 时遇到了一些噩梦。我已经用谷歌搜索了它的生活并阅读了这里的大量文章,但没有一个解决方案适合我。

我的设置:

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')。这已链接到我的数据库并且按预期工作。运行此 ->

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);

在我的 session 表中为已过期的 session 创建一个条目。

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

我的问题是我无法在任何其他函数中检索任何 session 。 这里进行一个简单的测试:

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"}`

我的 session 数据哪里去了?!

我觉得我错过了一些明显的东西,但我尝试了很多研究的变体,我变得有点迷失了。

我的浏览器 cookie 构造正确,但该值似乎与 session 表中存储的任何 SessionID 都不相关。

任何帮助/想法/建议将不胜感激!

克里斯

最佳答案

找到解决方案!

当发布到“未知”域时,Chrome(可能还有 Firefox,但未经测试)默认情况下会阻止 POST 请求中的 Cookie。客户端 CORS 中的一些安全功能...

要修复此服务器端: - 使用授权来源更新 Cors,供浏览器检查。

app.use(cors({ origin: config.origin, *(我使用一个数组来表示多个允许来源)* 凭证:真实 }));

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

xhrFields: { withCredentials: true }

将其添加到类的模型构造函数中。

$.ajaxPrefilter( 函数( 选项,originalOptions,jqXHR ) { 选项.xhrFields = { withCredentials: true }; });

此后,POST 请求中生成的 Cookie 成功“粘”到浏览器, session 功能就可以使用了!

好痛苦啊! 希望这个解决方案可以帮助其他人在他们的项目上节省一些时间!

关于java - Node JS session 不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945738/

相关文章:

java - Java中如何比较时间戳是否在给定时间段的范围内

java - Eclipse Java EE IDE 不支持 javax.servlet 包

javascript - Phantomjs-预构建错误

javascript - Electron - 单击按钮执行程序

node.js - 如何传入 `app` 以便在 model.js 文件中创建端点?

php - PHP和MySQL登录查询

PHP Session 变量随 header 重定向消失

mysql - 如何在nodejs中跨服务器共享 session ?

java - 扩展类(其父类扩展了 JFrame)后出现 StackOverflowError

java - 如何接收 EntityManager 的持久单元名称?