登陆后会经常提示登陆超时,重新登陆

问题:项目在部署到服务器后,一登录,就会跳出系统,提示登录超时。

1.用户未登录 2.用户登录在线超时 3.session中记录的用户id和动作传递的用户id不同(非本人操作)

解决:创建sessionListener,通过监听来确定session的创建和销毁。

发现:别人访问本机的项目没有问题,访问非本机的项目时,出现了bug,session第一次访问创建了一个,然后销毁再创建一个新的,和另外一个session。

通过sessionListener,打印日志发现一次访问,创建了3个session,这样就导致了session不一致的原因,通过注释掉一个拦截器后,session顺利变成1个create,1个destroy,再一个create。

  上网查看了tomcat下session丢失的原因,有以下几种:1.跨域访问。2.使用多台tomcat服务器进行负载均衡,未进行session复制操作导致session丢失。3.未对session进行持久化操作。逐一分析如下:

通过查看日志发现,被拦截时session中的内容为空,故被拦截跳转回登录页面。但是在这之间,并无程序如session.invalidate()让session失效的操作,且session并没有超时,故基本可判定是session丢失的情况。

 上网查看了tomcat下session丢失的原因,有以下几种:1.跨域访问。2.使用多台tomcat服务器进行负载均衡,未进行session复制操作导致session丢失。3.未对session进行持久化操作。逐一分析如下:

    1.跨域访问。所谓跨域访问,即如果在A网站中,我们希望用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域当中,则会出现跨域访问的情况。对于多个子系统的项目而言,多次通过浏览器进行跨域访问,会引起session不一致和session丢失的情况。解决跨域而导致的session丢失的情况处理参考《跨域,跨服务器调用的时候session丢失的问题总结》。由于本项目未采用跨域访问,故排除这种可能性。

     2.使用多台tomcat服务器实现负载均衡导致的session丢失。当使用tomcat服务器进行负载均衡时,如果不对session共享,会出现session唯一的情况,同样会导致session丢失。这就需要各服务器做到session同步,也就是所谓的session复制。Session复制,指的是集群环境下,多台应用服务器之间同步session,确保session保持一致,同时保持session中的内容一致,对外透明,就像一台应用服务器一样。对于这种情况的避免session丢失的处理参考《Apache+Tomcat负载均衡 session复制》。在项目当中,并未使用多台tomcat服务器实现负载均衡,故同样可以排除这种情况导致的session丢失。

     3.session未做持久化操作导致丢失。在客户端每个用户的Session对象存在Servlet容器中,如果Tomcat服务器重起/当机的话该session就会丢失,而客户端的操作应为session的丢失而造成数据丢失,而且当前用户访问量巨大,每个用户的Session里存放大量的数据的话,那么就很占用服务器大量的内存,从而是服务器的性能受到影响。因此,需要对session进行持久化操作。持久化操作的方法参见文章《tomcat session持久化》。在本项目中,session丢失的情况是出现在项目运行的过程中,而不是tomcat重启的时候,因此,可以排除是由于没有做持久化操作而导致的session丢失。

 经过上述分析,排除了可能导致session丢失的几种主要情况。这再一次让我感觉无计可施。而项目验收时频繁出现用户登出系统的情况又让这个问题的解决迫在眉睫。正当一筹莫展的时候,从一次偶尔的交谈中得知,服务器在搭建的过程中,并非直接使用tomcat,而是使用了apache作为代理服务器,转发请求至后台的tomcat服务器,会不会是由于代理的原因导致的呢?通过查阅资料发现,tomcat中的应用contex路径为 /portal,而外部访问context路径为 /,JSESSIONID的值从浏览器经过反向代理到达tomcat时,由于cookie内外路径不一致,导致tomcat每次重写设置JSESSIONID的值,导致session丢失的现象。在apache的000-default.conf中需要通过ProxyPassReverseCookiePath指令做一个路径映射,如下图:

以上是对应的可能性。

引用文章:https://blog.csdn.net/dinghaoseu/article/details/50499600

猜你喜欢

转载自blog.csdn.net/wadeltf/article/details/81093587