同一时间同一帐号只能登陆在一台电脑上的问题终于解决了

后登陆的用户会把先登陆的用户踢下线

具体实现:sessionCheck:

package test;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionMapping;

public class sessionCheck 
{

 private static sessionCheck sessioncheck;
 public sessionCheck(HttpServlet servlet) 
 {
 }
 public static sessionCheck getInstance(HttpServlet servlet) 
 {
  if (sessioncheck==null)
  {
   sessioncheck=new sessionCheck(servlet);
  }
  return sessioncheck;
 } 
 public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping) 
 {
        final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session
        System.out.println(sc);
        System.out.println(session);
        if (sc.getAttribute(userName) != null) 
        {
         // 第二次登陆后第一次无效
            ((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session
            System.out.println(session);
        }
        sc.setAttribute(userName, session);//放入当前最新session
        mapping.findForward("sessionDestroy") ;
    }

}



UserLoginForm:



sessionCheck.getInstance(this.getServlet()).setSession(userName, servlet, session, mapping);




jsp:



<body ="sessionDestroy()">

< language="java" type="text/java">
sessionDestroy()
{
  alert("连接超时,或帐号已在别处登陆,请查证后重新登陆");
  location.href = "UserLogin.jsp" ;
}
</>

这样在两台电脑上后登陆的人用户就会把先登陆的给踢掉,但是暂时还没实现在同一台电脑上后登陆的用户把先登陆的踢掉的功能



上面是在后台实现的,如果要在JSP中做,直接appliction.getAttribute(userId),appliction.setAttribute(userId, session)就行,application的我还没有去测试,有时间去试一下去



黑色头发 http://heisetoufa.iteye.com