所有人都知道用户登录session是一个很好的选择,而且几乎都是用的session,但是session是不能跨窗口使用的,每打开一个浏览器,系统会赋予一个新的sessionID,而每个sessionID是不同的,也就是说你每次登录用的都是不同的session,而不是你之前登录使用的那个。那么如果你要在全域只能使用一个用户ID,那怎么办呢?
我们可以通过自定义一个sessionListener,用这个sessionListener实现HttpSessionAttributeListener,实现该接口需要实现三个方法,attributeAdded、attributeRemoved、attributeReplaced。在这里我们只需实现前两个方法。首先我们用一个list容器装当前已经登录的用户,接着在其他用户登录的时候判断是否为之前已经登录的用户,如果该用户已经登录,你可以选择友情提示该用户已经登录,你也可以直接将前面已经登录的用户挤出去,用当前登录用户。
具体代码如下:
public class sessionListener implements HttpSessionAttributeListener{
public static List list = new ArrayList();
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getName().equals("user")||arg0.getName().equals("backUser")){
User user=(User)arg0.getValue();
list.add(user);
}
}
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
try {
int n = 0;
User u = (User) arg0.getValue();
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
if (u.getId().equals(user.getId())) {
n = i;
break;
}
}
list.remove(n);
} catch (Exception e) {
}
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
//是否重复登录的封闭方法
public static boolean getRepeat(Long userId) {
boolean flag = false;
List list = sessionListener.list;
for (int i = 0; i < list.size(); i++) {
User user = (User) (list.get(i));
if (userId.equals(user.getId())) {
flag = true;
}
}
return flag;
} 原文地址:http://blog.csdn.net/nethackatschool/article/details/45110765