配置会话HttpSession的超时时间

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设置了两个超时时间,那么将以较小的那个时间为准。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值