我要记录当前在线的人的人名的列表,把它放在application的一属性里了,在web.xml里配置了监听器类
,可问题来了:
如果用户没有正常退出,而session的周期为100分钟,该用户不正常退出后在session周期内session不会触发sesstionDestroy事件,该用户退出后不再100分钟内登录还好,要是他又登录了,等到前一个session的周期到时又会把此人的在线信息去掉(在sessionDestroy里程序实现的),而此人当前是在线的。
咋办?我现在就没有一个逻辑
[b]问题补充:[/b]
"这样在sessionDestroy时要判断sessionid和用户名同时满足的时候才删除...."
满足什么条件呢?想不出有什么方法能判断出在session不正常退出销毁时该用户是否登录
[b]问题补充:[/b]
“这样在sessionDestroy时要判断sessionid和用户名同时满足的时候才删除。。。。”
满足什么条件能使得:此时该用户又登录了则不删除,要没登录则删除?
[b]问题补充:[/b]
拜托了。各位
首先要保证用户每次登录都使用新的session,而不是使用旧的session, 这样就每一次登录的sessionid都不一样。
用户A登录:
往application里加入用户A和sessionidA
SessionA没有过期,用户A主动登出:
直接把用户A从application里删除, 并且使sessionA无效。
SessionA没有过期,用户A重新登录:
把application的用户A对应的sessionidA更新成sessionidB.
SessionA过期:
去检查application里的用户A的对应的SessionID是否等于sessiondidA. 如果相等把用户A从application里删除。这时应该不等(因为用户重新登录过),所以不删除。
SessionB过期:
去检查application里的用户A的对应的SessionID是否等于sessiondidB. 如果相等把用户A从application里删除。这里是相等的,删除。
也不知道这样说,你是否能够明白?我想这个逻辑应该是没有问题的。你再仔细想一下。
要是他又登录了,那session应该会重新计算的,
你不是写了监听器嘛,那不就又再次把它加入application里,你用set集合保存用户名就好,那就不会重复
把用户名和sessionid都加到application里,这样在sessionDestroy时要判断sessionid和用户名同时满足的时候才删除。当然在加入application的时候也须判断是不是有重复的,如果有重复的,就把原来那个删除了,或者直接更新sessionid。