javaweb项目通过session来管理用户在线

      本节主要介绍session的一些小知识。

1、登录的时候根据session验证是否登录

public class LoginSessionListener implements HttpSessionListener {
// 保存 sessionId和userName 的映射(sessionid,userName)
public static Map hUserName = new ConcurrentHashMap();
// 集合对象,保存session 对象的引用(sessionid,session)

public static Map htsession = new ConcurrentHashMap();

        //HttpSessionListener 实现类
public void sessionCreated(HttpSessionEvent se) {}
         //登录超时自动执行这个方法  HttpSessionListener 实现类
public void sessionDestroyed(HttpSessionEvent se) {
hUserName.remove(se.getSession().getId());
htsession.remove(se.getSession().getId());
se.getSession().invalidate();   //清空这个session
}
        //将第一个已经登录的用户踢下线调用的方法
public static boolean kickFirstOper(HttpSession session, String nUserName){
boolean flag=false;
if (hUserName.containsValue(nUserName)) {
flag = true;
Iterator iter = hUserName.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if (((String) val).equals(nUserName)) {
iter.remove();
HttpSession ses = (HttpSession) htsession.get(key);
if (session.getId().equals(((HttpSession) htsession.get(key)).getId())) {//是同一台机子登录
htsession.remove(key); //直接就把MAP的当前记录给清了
    hUserName.remove(key);
//     ses.invalidate();
    hUserName.put(session.getId(), nUserName);
    htsession.put(session.getId(), session);
}else{   //不是同一台机子登录 先把前面的用户T了 然后把新用户的记录放进MAP
htsession.remove(key);
hUserName.remove(key);
ses.invalidate(); //把前面登录的那个操作员session销毁
hUserName.put(session.getId(), nUserName);
htsession.put(session.getId(), session);
}
break;
}
}

}
return flag;
}

}

    这是一个简单的登录时,验证是否已经登录的类,登录了就销毁前一个人的session,然后把新登录的放入。

    主要用这个方法ses.invalidate()来清空session

2、struts拦截器拦截是否登录

String s = String.valueOf(httpservletrequest.getSession().getAttribute("regNo"));
在拦截器中从session中拿登录用户名,如果  s为空,则session为空,未登录或被挤下线,重新登录。

你可能感兴趣的:(服务器,java)