java web 监听系统在线用户人数(tomcat session的创建时机)

在Spring MVC和Tomcat环境下,统计系统在线用户通常通过监听HttpSessionListener实现。但遇到问题:用户主动退出系统时,在线人数不会减少,直到session超时。原因在于登录页面调用getSession()时会创建新的session。结论是,仅在确保session销毁后不再使用getSession()时,HttpSessionListener才适合用于在线用户计数。正确做法是在用户登录成功后增加在线人数。
摘要由CSDN通过智能技术生成

 spring mvc架构,tomcat运行的web项目,需要统计系统在线用户人数。在网上找的资料,很多都是使用HttpSessionListener监听session的创建和销毁来实现,session创建则人数+1,session销毁则人数-1,人数存放在ServletContext中。但是我在使用的时候发现,用户主动退出系统(退出函数中销毁session),在线用户数不会改变,只有等session超时自动过期在线用户数才会减少。跟踪代码发现,用户主动退出系统,session销毁,但是用户主动退出系统后重定向到登录页面,session会再次建立(在线用户数-1又+1=不变)。意思就是说只要到了登录页面,不管有没有登录成功,都会建立一个session。难道tomcat在应用被访问时就创建session么?再查资料以后发现,原来tomcat并不是应用被访问就创建session,竟然也不是在动态存放内容到session中时创建,而是在调用getSession()方法时,如果session存在就访问存在的session,如果不存在就创建session并返回刚创建的session。查了代码看到项目中在登录页面时有调用getSession()做一些逻辑,所以只要进入登录页面,即便用户还没有登录,session也被创建出来了,只是还未放入用户信息等参数而已


结论:如果能够确保session销毁后不会再使用getSession()做逻辑,那么可以使用HttpSessionListener来统计在线用户数,否则,在线人数+1的逻辑不能在监听到session创建事件时就做&#x

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值