Express.js Session 中间件的小坑
坑点
直接说什么情况可能会遇到我遇到的坑
- 用了express-session
- nginx 做负载均衡并且开启了健康检查
原因
express session 中间件,当用户初次访问网站 cookie 里面没有 sid
的时候,会默认生成一个 sid 写入 cookie,同时在服务端保存一个 session。
而 nginx 的健康检查是通过 http 请求返回状态码来检测的。
但是 nginx 发送的请求没有在 cookie 里面带上 sid 导致 中间件认为这是一个新的访问,然后给他设置了一个 session。
每一个 nginx 健康检查的 http 请求都会创建一个 session,导致实际无用的 session 不断增加。
解决方法
- 自己撸一个新的中间件,默认对没 sid 的情况不自动创建。 只有当自己设置session的时候才创建 sid 写入 cookie ,并在服务器端保存。
- 关闭 nginx 健康检查
- 用淘宝的 tengine ,他的健康检查方式多样,可设置的多。
3 回复
查UA怎么样?
@hezedu 通过 ua 过滤 他的健康检查的请求应该也是可行的。 做一个中间件 根据 ua 返回 200,同时不next=。= 不过中间件要放在session 中间件前面
么红黑哥