问题是这样的,在登录时要进行验证码认证,进入登录页后马上请求验证码,同时server端要将生成的验证码存放在对应的session里面。但是发现验证码并没有被正确的写到session里面。
代码类似是这样
getCaptcha(req, res) {
console.log(req.session.captcha, 'old captcha')
const captcha = Math.random().toString(10).substr(2, 4)
req.session.captcha = captcha
console.log(req.session.captcha, 'new captcha')
const captchaImage = image(captcha) // 伪代码:生成验证码的base64的图片
res.set('Content-Type', 'image/png')
res.end(img)
}
多次刷新后表现结果是:
2367 old captcha
4567 new captcha
2367 old captcha
7809 new captcha
2367 old captcha
5690 new captcha
也就是session没有被更新,或者说被某些方法重新给写回去了。
NodeJS 建议用来做无状态服务器!。假设你如此开发,部署必然是有负载均衡或者pm2多核。用户A在1核上登录,第二次请求极可能会发送到2核状态立马就丢失了。使用 session 建议使用其他方案替代。