node.js - session 在 Express js 中不起作用

标签 node.js express session session-cookies

我正在使用快速 session 创建登录应用程序。当我通过发布请求登录应用程序时,将创建 cookie,但 session 对我不起作用。

服务器.js

var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
app.use(cookieParser());

app.use(session({
  key: 'user_sid',
  secret: 'somerandonstuffs',
  resave: false,
  saveUninitialized: false,
  cookie: {
    expires: 600000
  }
}));
var sessionChecker = (req, res, next) => {
  if (req.session.user && req.cookies.user_sid) {
    res.redirect('/');;
  } else {
    next();
  }
};
app.post('/login', function (req, res) {
  console.log(req.session.user)
  if (req.session.user && req.cookies.user_sid) {
    result = { "message": "loggedinwithsession" };
    res.send(result);
  } else {
    var data = req.body;
    var responseData = {};
    console.log(data);
    res.setHeader('Content-Type', 'application/json');
    controller.cont.login(data.email, data.password).then(result => {
      res.send(result),
        req.session.user = result;
    }
    ).catch(result => res.send(result))
  }
})

最佳答案

您将在设置 session 之前发送结果数据。

controller.cont.login(data.email, data.password).then(result => {
    res.send(result), //wrong
    req.session.user = result;
}).catch(result => res.send(result))

你应该这样做。

controller.cont.login(data.email, data.password).then(result => {
    console.log("setting session"); //for debugging
    req.session.user = result; // first set session
    res.send(result);          // then send result
}).catch(result => res.send(result))

这是一个最小版本。

app.all('/', function(req, res){
    console.log(req.session)
    res.send("welcome")
})
app.get('/set', function(req, res){
    console.log(req.session)
    res.setHeader('Content-Type', 'text/html');
    req.session.data = "test session value"
    res.send("test")
})

关于node.js - session 在 Express js 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532034/

相关文章:

node.js - 使用 npm 安装 express

node.js - 如何在node js中访问另一个文件中的变量

session - AngularJS:无法读取 session 值

javascript - 在 nock 中拦截所有带有不同动词的请求

node.js - 用于用户和管理员的 deserializeUser

node.js - Express js 在哪里保存 session 详细信息?

c# - session 超时与定时器

node.js - 我应该在每个模块中都要求吗?

javascript - 如何在node.js中将带有前导零的字符串数字作为字符串传递?

java - 在 doPost/doGet 期间处理 session 时 session 是否会过期,如果是,可以采取什么操作