【发布时间】:2019-01-24 01:44:59
【问题描述】:
我正在尝试在用户登录时为其保存会话变量。这适用于计算机,但当我使用 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 天,但它仍然无法正常工作。
【问题讨论】:
-
你能检查一下你的cookie值吗?如果您使用 Safari,Safari 会拒绝发送任何包含非 ASCII 字符的 cookie
-
@DarknessZX 我该怎么做?我正在使用野生动物园
-
mattvanderpol.com/2013/08/14/… 如果你有 MAC,你可以试试这个。你可以对你的 cookie 会话进行编码,虽然它以前对我有用
-
@DarknessZX 看起来它不是特定于浏览器的。我也在 chrome 上试过这个,但仍然没有运气。
-
我开始想,该设备有一些特别之处,它适用于 iphone 7/8。
标签: javascript node.js express express-session