大家都知道,session的创建是基于浏览器客户端的,但是某系统昨天发生了一件怪异的事情,不同的用户之间登陆以后相互串联,通过监控session可以看到session共享了,这样会导致不相干的用户看到各自的信息,更严重的可能会导致经济纠纷,问题的严重性可想而知,于是想各种办法来解决这个问题!
第一个办法是追溯这种情况发生的时间点,因为自上线以来是第一次发生,所以想到是不是其他的修改导致的关联影响,记得前几天做了一次nginx的优化,所以就先从nginx查起,之前的一篇博文也提到过使用了epoll模型用于提升nginx性能处理大并发的情况的会不会对session有影响,于是就将其注释掉,平滑重启nginx服务,经测试,好了,于是认为问题解决了,可是不久又收到用户反馈仍然存在串联现象,于是再想办法!
第二个办法,将用户信息写入session,这样总不会重复了吧,但是发现仍然会串,因为用户名已经成为了session的一部分,并且每登陆一次就会把用户名写入session,只不过是把session加长了,和原来没有本质区别。
第三种方法,最近做了负载均衡,是否负载均衡的session共享策略不对,最终验证与此无关
另外也查了安全宝的缓存策略和永久在线策略发现均与此无关,最终还是回到了nginx上,为了加快页面的访问速度,反向代理相关配置用了本机化127.0.0.1,是否与此有关?,从现象看感觉session用的是服务器上的而不是用户客户端的,先不管是不是这个原因,把反向代理IP设置成了内网IP再进行测试,发现session完全 就和客户端浏览器挂上钩了,不在出现串用户的现象了。这样理论上会比配置外网IP访问速度快。
总结这次问题,内网IP和本机IP还是有差别的,前者应该多一个网关转换的环节,在这个过程中服务器会优先识别作为客户端传来的session,而后者相当于通过一台中转用的机器来访问应用,那么其客户端传来的session就可能被本机session替代导致session共享的假象!
- 上一篇: jboss启动时的一个"段错误"问题
- 下一篇: nginx配置的一个技巧(一)
评论