阅读 40

Session过期!系统竟然奔溃了! | Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

Session存储查询条件,导致OOM问题

面试官:我看你简历里面写了你了解session机制,那你说说session是怎么运用在系统中的。

杨乐乐:这个我知道,session是用来做交互的,用来做客户端和服务器之间的认证。客户端将session存储在cookie中,然后服务器将session存储在HttpSession中,这样在每次请求时进行校验就可以保证用户的登录状态了。

面试官:嗯,那你知道,session处理做个用,还会用在那些地方吗?

杨乐乐:这个,存在服务端的是HttpSession对象,其中也可能会存一些其他的数据。

面试官:那你说说,你有没有遇到一些session存储数据的问题

杨乐乐:那,还没有

  将数据存在session中,有些框架会将一些数据持久化在session中,但是session会过期,导致持久化的数据丢失,而这时候用户可能打卡其他的页面,导致后台的session又重新赋值,用户继续在session丢失的页面操作,这就会产生一系列的问题。

  而我所参与的项目就是因为值的丢失,到时导出EXCEL时,查询数据量过大,直接导致系统内存溢出,服务崩溃。

  其实如果项目正常也不回崩溃,比如说,session过期后访问项目,会让重新登录,但是我们的项目有同一登录,在session过期后会继续访问同一登录,然后又重新登录到系统,这是系统本身就有问题的,因为这涉及到一个问题,session为什么要设置过期时间。

  • 第一点是,用户可能已经关闭了浏览器而没有点击注销按钮,这样如果session继续存在服务端就没有必要。

  • 第二点是,如果一个用户长时间没有操作离开了电脑,那么此时有其他人操作电脑,就会不安全。

其实,现在我的系统是不满足第二点的,所以有问题。

另外,由于数值条件丢失,导致查询过多数据导出,这也是有问题的,因为大数据量的导出,应该通过分页。

所以写代码一定要健壮,每一次的差不多都会对未来埋下隐患。

文章分类
后端
文章标签