配置会话HttpSession的超时时间

版权声明:创业:https://shop120085695.taobao.com https://blog.csdn.net/zxf1242652895/article/details/85677738

1、现象:问题描述

         客户端请求与Servlet建立连接之后,将为每一个客户端指派一个HttpSession对象,并且在该用户会话期间一直存在,假如有5000个用户,那么将会产生5000个HttpSession对象,每个HttpSession都需要分配一定的内存,如部分用户长时间不活动但还是继续保留这个Session的话,就极大的浪费了内存,也不合理的限制了最大用户数

2、关键过程:

         根本原因分析引起这个问题的根本原因是没有设置HttpSession的超时时间,导致即使会话长期不活动但系统还仍然保持这个会话,占用系统资源。

3、结论:解决方案及效果
针对超时时间的设置,有两种方法可以解决这个问题,
(1) 在Servlet代码中,使用HttpSession对象的方法setMaxInactiveInterVal(int)设置一个会话维持非活动状态的最大秒数。代码如下:


public void doGet(HttpServletRequest req,HttpServletResponse res) throws
ServletException,IOException {
HttpSession session=req.getSession();
session.setMaxInactiveInterval(60);
}
(2).在web.xml文件内通过使用session-config标志设置,通过标志session-timeout可以定义所有非活动HttpSession对象存在的最大时间。


<session-config>
<session-timeout>60</session-timeout>
</session-config>


4、经验总结:预防措施和规范建议
         以上两种方法都可以解决问题,第一种方法是将超时值用于特定的servlet,针对每一个Session进行单独设置,而第二种方法是应用于整个web应用程序,所有的Session都遵循这个共同的超时时间,根据不同的需要来选用这两种方法。如果同时使用了这两种方法对同一个Session设置了两个超时时间,那么将以较小的那个时间为准。

猜你喜欢

转载自blog.csdn.net/zxf1242652895/article/details/85677738