麻烦各位帮我看看我在使用 express session 时遇到的问题。
发布于 5 年前 作者 sohoorc 3402 次浏览 来自 问答

最近在学 nodejs,在实现 评论验证码时遇到了一个问题。

var identityKey = 'captcha';

app.use(session({
  // name: identityKey,
  secret: 'xiao-gan-de-session-ce-shi',  // 用来对session id相关的cookie进行签名
  store: new MongoStore({ mongooseConnection: mongoose.connection }),  // 本地存储session(文本文件,也可以选择其他store,比如redis的)
  saveUninitialized: false,  // 是否自动保存未初始化的会话,建议false
  resave: false,  // 是否每次请求都重新生成session
  // unset:null,
  cookie: {
    maxAge: 10 * 3000,  // 有效期,单位是毫秒
  }
}));

app.use(function timeLog(req, res, next) {
  // console.log('Time: ', Date.now())
  // req.session.captcha = captcha.text;
  next()
})

app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(bodyParser.raw());
// app.use('/api/captcha', captcha)
app.use('/api/comment', comment);
app.use('/api/base', base);
app.post('/a',function(req,res,next) {
  req.session.a = '666888';
  res.json({data:666888})
})

app.post('/b',function(req,res,next) {
  req.session.b = '111222';
  console.log(req.session,'b点打印session');   //  此处打印结果中 没有 /a 中的 666888
  res.json({data:111222})
})

app.post('/c',function(req,res,next) {
  req.session.c = '333444';
  console.log(req.session,'c点打印session');  //  此处打印结果中 没有 /b 中的 111222
  res.json({data:333444})
})

问题:

  1. 问题:初始化时 mongodb 内可以看到 4 个 session 数据,我期望的是 1 条公用的 session 数据,是不是我理解有问题。
  2. 当我在 /a /b /c 的接口中像这样req.session.a = 666888 赋值 时,由于/a /b /c 中不是一个 session,只能打印出对应路由所看到的赋值,不能看到其他两个路由中session赋的值 。

请问我该怎么解决呢?

3 回复

你试试把cookie过期值改长一点,可能是你两次访问的时间间隔太长了,数据过期了,

而且现在的session不需要cookieparser作为依赖了,可以去掉,否则可能会导致一些问题,你也可以试试

是cookie和session两个中间件的顺序问题吧,改一下顺序试试呢

回到顶部