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

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

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

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

public static Map<String, HttpSession> htsession = new ConcurrentHashMap<String, HttpSession>();

        //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为空,未登录或被挤下线,重新登录。

发布了108 篇原创文章 · 获赞 29 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览