快速会话未保存为Ipad

时间:2018-08-17 04:00:17

标签: javascript node.js express express-session

我正在尝试为用户登录时保存一个会话变量。这可以在计算机上使用,但是当我使用 Safari Chrome iPad 上尝试时,它不会保存。

在这里设置会话:

app.set('trust proxy', 1)
app.use(session({
  secret: crypto.randomBytes(20).toString('hex'),
  resave: false,
  duration: 60 * 60 * 1000,
  activeDuration: 10 * 60 * 1000,
  saveUninitialized: false,
  cookieName: 'session',
  cookie: { secure: true }
}))

我使用此路由来设置用户:

.get('/checkLogin', (req,res) => {
  const loginCred = req.query;
  db.any('SELECT * FROM users WHERE user_name = $1 AND password = $2 LIMIT 1', [loginCred[0], loginCred[1]])
  .then(function (user) {
    req.session.user = user;
    req.session.save();
    res.end(JSON.stringify(user));
  })
  .catch(function (err) {
      throw err;
  })
})

当我在控制台上登录时,它已正确设置。 然后,当我调用返回的会话时,它不存在。我试图添加保存,但仍然没有用。我还向会话变量中添加了maxage,以使其保持活动状态3天,但仍然无法正常工作。

2 个答案:

答案 0 :(得分:2)

您的Cookie为 {secure:true} ,它需要HTTPS连接,浏览器才能将会话Cookie和请求一起发送回去。但是建议您确保它适合您的测试环境,确保两个设备上都使用HTTPS

  

https://www.npmjs.com/package/express-session#cookiesecure

还具有开发或生产模式,并在进行更改后重新启动express每次重新启动后的秘密更改(通过使用函数[crypto.randomBytes(20).toString('hex')]而不是静态密钥) 导致重新启动后客户端的会话ID无效;无论如何,这都不重要,因为您没有设置持久性会话,因此任何重新启动都会擦除所有会话。 如果您需要持久会话,请使用memcached,数据库或文件而不是进程内存进行签入

  

https://www.npmjs.com/package/express-session#store

答案 1 :(得分:0)

尝试放入resave: true。如果可行,您可能需要更改 saveUninitialized

的值