把一个变量设成application范围的,
如果有用户则取出此变量值比较

解决方案 »

  1.   

    or In DB set a flag
      

  2.   

    控制一个session不为空以后就无法登陆不就行了吗?
      

  3.   

    单独用application或session好象是不太可行的,
    用pagecontext与session的bound或unbound监听,
    具体查找一下资料
      

  4.   

    当用户登陆时,给他加上session,写入数据库的某表中,其他人再用这个帐号登陆时先查看此表,已经有人登陆了,就不允许他再登陆了.当用户登出的时候删除掉相应记录.当然要为这个session加上session监听器.
      

  5.   

    呵呵 application里面保存个值就行了  绝对可以
      

  6.   

    当用户登陆时,给他加上session,写入数据库的某表中,其他人再用这个帐号登陆时先查看此表,已经有人登陆了,就不允许他再登陆了.当用户登出的时候删除掉相应记录.当然要为这个session加上session监听器.
    这个方法不错吗!
      

  7.   

    package com;import javax.servlet.http.*; 
    import javax.servlet.*; 
    import java.util.Date; 
    import java.sql.*;
    import java.net.URL;
    import java.text.*;
    import java.util.Vector;
    import java.net.Socket.*;
    public class listen implements HttpSessionBindingListener  { 
         public listen(){
       } 
       private Vector users=new Vector();
       public int getCount(){
           users.trimToSize();
           return users.capacity();
       }
       public boolean existUser(String userName){
           users.trimToSize();
           boolean existUser=false;
           for (int i=0;i<users.capacity();i++ )
           {
               if (userName.equals((String)users.get(i)))
               {
                   existUser=true;
                   break;
               }
           }
           return existUser;
       }   public boolean deleteUser(String userName) {
           users.trimToSize();
           if(existUser(userName)){
               int currUserIndex=-1;
                for(int i=0; i<users.capacity();i++){
                   if(userName.equals((String)users.get(i))){
                       currUserIndex=i;
                       break;
                   }
               }
               if (currUserIndex!=-1){
                   users.remove(currUserIndex);
                   users.trimToSize();
                   return true;
               }
           }
           return false;
       }   public Vector getOnLineUser()
       {
           return users;
       }
         public void valueBound(HttpSessionBindingEvent e) { 
           users.trimToSize();
    HttpSession session = e.getSession();
    session.getAttribute("teleno");

           if(!existUser(e.getName())){
               users.add(e.getName());
               try
    {
    java.util.Date dt = new java.util.Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String logintime=sdf.format(dt);
    String url = "jdbc:bea:sqlserver://192.168.20.25:1433;DatabaseName=Community";

    Class.forName("weblogic.jdbc.sqlserver.SQLServerDriver");
    Connection con = DriverManager.getConnection(url,"sa","jfy");
    PreparedStatement stmt = con.prepareStatement("insert into  UserLoginInfo(Telephone,LoginTime,SessionID,UserIP) values('"+e.getName()+"','"+logintime+"','"+session.getId()+"','"+session.getAttribute("ip")+"')");

    stmt.executeUpdate();

    stmt.close();
    con.close();
    }catch(java.lang.Exception ex){
    ex.printStackTrace();
    }
               System.out.print(session.getAttribute("ip")+"\t   登入到系统\t"+(new Date()));
               System.out.println("      在线用户数为:"+getCount());
           }else
               System.out.println(e.getName()+"已经存在");
         }      public void valueUnbound(HttpSessionBindingEvent e) { 
           users.trimToSize();
           String userName=e.getName();
           deleteUser(userName);
           HttpSession session = e.getSession();
           try
    {
    java.util.Date dt = new java.util.Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String logouttime=sdf.format(dt);
    String url = "jdbc:bea:sqlserver://192.168.20.25:1433;DatabaseName=Community";

    Class.forName("weblogic.jdbc.sqlserver.SQLServerDriver");
    Connection con = DriverManager.getConnection(url,"sa","jfy");
    PreparedStatement stmt = con.prepareStatement("update  UserLoginInfo set LogoutTime='"+logouttime+"' where SessionID='"+session.getId()+"'");

    stmt.executeUpdate();

    stmt.close();
    con.close();
    }catch(java.lang.Exception ex){
    ex.printStackTrace();
    }
           System.out.print(userName+"\t   退出系统\t"+(new Date()));
           System.out.println("      在线用户数为:"+getCount());
         } 

      

  8.   

    同意guxing415(孤星)的说法,也可以不建表,用application来代替,
    session事件监听的写法为:
    public class SessionTest implements javax.servlet.http.HttpSessionBindingListener
    {
          //加入session对象时触发此方法
          public void valueBound(HttpSessionBindingEvent event)
          {
          }
          //移出session时触发此方法
          public void valueUnbound(HttpSessionBindingEvent event)
          {
          }
    }
      

  9.   

    说说我的做法.
    把用户和session对象一一对应,置入一个Map中,每次登录的时候检查当前用户是否已经在这个Map中,如果有,并且session不相等(==),就把前一个session置为无效;如果当前用户不在Map中,置入。用户退出,从Map中remove,并且置session无效;session自动过期,从Map中remove。
    需要注意的是,这些操作必须同步。
      

  10.   

    把一个变量设成application范围的,对这个变量进行P V操作,就好了