麻烦各位帮我看看我在使用 express session 时遇到的问题。

2019-06-30 15:18:21 +08:00
 sohoorc

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

代码:

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)

问题:

  1. 初始化时 mongodb 内可以看到 4 个 session 数据,我期望的是 1 条公用的 session 数据,是不是我理解有问题。
  2. 当我在 app.use('/api/captcha', captcha) 内获取到随机验证码 并像这样赋值 req.session.captcha = 4444 时,app.use('/api/comment', comment) 内因为和 captcha 内 不是一个 session,所以拿不到 captcha 这个字段。

请问我应该怎么解决呢?

3918 次点击
所在节点    Node.js
1 条回复
sohoorc
2019-06-30 16:50:58 +08:00
已解决,是因为跨域导致的每次请求 sessionid 都不同

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/578726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX