黑马程序员技术交流社区
标题: session丢失 [打印本页]
作者: 曹老师 时间: 2017-9-19 00:25
标题: 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持久化》。
作者: wheat 时间: 2017-9-19 07:16
专业,赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |