3 个解决方案
#1
老掉牙的问题了,前几年这里就讨论过了,不过也没啥结果。
这种问题是防不胜防的。
用户可以不关浏览器直接关机、拔电或者断电。
这种问题是防不胜防的。
用户可以不关浏览器直接关机、拔电或者断电。
#2
还可以,拔网线,甚至可能突然发生地震。你防不胜防。
防止重复登陆,一个办法就是把在数据库/内存中记录 用户ID-sessionId的映射。登录是更新这个映射,filter检查,一旦有问题就session.invalidate()。不过,个人感觉,很多情况下限制单一用户登录,其实没什么大的意义。
防止重复登陆,一个办法就是把在数据库/内存中记录 用户ID-sessionId的映射。登录是更新这个映射,filter检查,一旦有问题就session.invalidate()。不过,个人感觉,很多情况下限制单一用户登录,其实没什么大的意义。
#3
给你一个统计在线人员的类吧;
package net.risesoft.integration.online;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import net.risesoft.commons.RiseUser;
import net.risesoft.commons.SessionConst;
public class OnlineUsersHttpSessionBindingListener implements
HttpSessionBindingListener {
/**
* 对象实例(即OnlineUsersHttpSessionBindingListener的实例)作为一个属性被设置到session的
* 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中设置
*
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueBound(HttpSessionBindingEvent event) {
//现在暂时不需要额外处理,你可以在这里记录日志等
RiseUser user = (RiseUser)event.getSession().getAttribute(SessionConst.USER);
OnlineUsers.addUser(user);
}
/**
* 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般发生在注销方法的处理过程中
*
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueUnbound(HttpSessionBindingEvent event) {
RiseUser user = (RiseUser) event.getSession().getAttribute(
SessionConst.USER);
OnlineUsers.removeUser(user);
}
#1
老掉牙的问题了,前几年这里就讨论过了,不过也没啥结果。
这种问题是防不胜防的。
用户可以不关浏览器直接关机、拔电或者断电。
这种问题是防不胜防的。
用户可以不关浏览器直接关机、拔电或者断电。
#2
还可以,拔网线,甚至可能突然发生地震。你防不胜防。
防止重复登陆,一个办法就是把在数据库/内存中记录 用户ID-sessionId的映射。登录是更新这个映射,filter检查,一旦有问题就session.invalidate()。不过,个人感觉,很多情况下限制单一用户登录,其实没什么大的意义。
防止重复登陆,一个办法就是把在数据库/内存中记录 用户ID-sessionId的映射。登录是更新这个映射,filter检查,一旦有问题就session.invalidate()。不过,个人感觉,很多情况下限制单一用户登录,其实没什么大的意义。
#3
给你一个统计在线人员的类吧;
package net.risesoft.integration.online;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import net.risesoft.commons.RiseUser;
import net.risesoft.commons.SessionConst;
public class OnlineUsersHttpSessionBindingListener implements
HttpSessionBindingListener {
/**
* 对象实例(即OnlineUsersHttpSessionBindingListener的实例)作为一个属性被设置到session的
* 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中设置
*
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueBound(HttpSessionBindingEvent event) {
//现在暂时不需要额外处理,你可以在这里记录日志等
RiseUser user = (RiseUser)event.getSession().getAttribute(SessionConst.USER);
OnlineUsers.addUser(user);
}
/**
* 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般发生在注销方法的处理过程中
*
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueUnbound(HttpSessionBindingEvent event) {
RiseUser user = (RiseUser) event.getSession().getAttribute(
SessionConst.USER);
OnlineUsers.removeUser(user);
}