所有人都知道用户登录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; }
时间: 2024-11-10 08:05:12