sessionListener
监听session的产生和销去
生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆

解决方案 »

  1.   

    session不行的,每次都生成不同的session id,没有办法判断的有人说可以放到application对象里,里面存有所有session的对象,不知道有人会用么
    给点简单的代码,谢谢
      

  2.   

    把用户ID从库中取出,存入session然后判断不就行了!
      

  3.   

    两个用户都用用户名1在不同的机器上登录,能取到另外一台机器的session么?所以没有办法比较阿
      

  4.   

    用登陆判断就可以了,SESSION也可以。
      

  5.   

    session占内存,想了个笨办法:
    用户登录成功后,把其用户名放入一个表A中,这就要求每个用户登录时先查询表A,如果有相同的用户名,则不让其登录!用户退出登录时,再把表A中其相应的记录(其用户名)删除即可!提供一个思路,希望对你有用!
      

  6.   

    登录后用户名可以存储在一个和用户名相同的Session变量里,以后判断这个Session是否为null就可以了。
      

  7.   

    其实就在用户表加多一个字段,表示用户是否登录
    用户登录除了校验密码之外还要确定该字段是否为false
    登录之后置为true
      

  8.   

    用hashtable记录每一个用户的用户名, 用户登陆时从它内取值,值为空则用户还没有登陆, 为了保证 用户退出时 hashtable中一定要清除用户记录, 在用户退出时从hashtable中清除用户,并在session失效时再从hashtable中清除一次用户
      

  9.   

    sessionListener
    监听session的产生和销去
    生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆
    就用这个
      

  10.   

    wenming168(清风)说得很有道理
    但有没有具体实现方案?
      

  11.   

    to  zjwpanhp(php) :
    两个用户都用用户名1在不同的机器上登录,能取到另外一台机器的session么?所以没有办法比较阿
    session  是由 servlet容器 产生    通俗的讲就是有WEB服务器端产生的  只要你把一个session 产生时 在它里面放入 产生该session 的用户名或ID  ,每次登陆时 都遍例一下 所有session 判断是否已经有等于该用户名或用户ID的session的存在 有则已登陆,没有则没登陆啊
      

  12.   

    wenming168(清风) 所说有道理,可怎么保证用户是正常退出呢?
    funcreal(new PLMM[Integer.MAX_VALUE]) :应该是一个不错的解决方案,可否写一段代码:)
      

  13.   

    用户登录成功后,把其用户名放入一个表A中,这就要求每个用户登录时先查询表A,如果有相同的用户名,则不让其登录!用户退出登录时,再把表A中其相应的记录(其用户名)删除即可!提供一个思路,希望对你有用!
      

  14.   

    用cookies  把这个用户名获取,记录并设定一个时间  让他在莫个时间段不能在进行操作   就想投票程序
      

  15.   

    我也想知道怎么做啊~!还是session好啊 ~~
      

  16.   

    funcreal(new PLMM[Integer.MAX_VALUE]) 
      sessionListener  监听session的产生和销去
      生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆 其实我也常见得这是个难题
    因为我在应用C#.net时,好像只能监听到session的产生,不能监听到session取消的事件!
    所以不管你怎么做都很难判断是否已登录 !
    应为你无法捕获用户下线的时候,所以系统始终会认为他在线!!如果能控制session消亡的话,那怎么样都可以实现,比如保存到数据库,或Application中都行!
      

  17.   

    都看了n个类似的提目了,一直不得要解,
    综合一下感觉sessionListener是一个相对比较可以的实现方法,捕捉session消亡的情况下的事件,修改保存在数据库或application内的值。不过还是有一点问题,一个session消亡需要一定时间,有一个延迟
      

  18.   

    大家的争议关键就在于Session对象销毁时能不能删除用户上。
    关于这一点,一楼的方法是最正确的!我这里找来一段代码,只是说明一下问题import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    import javax.servlet.http.HttpSessionActivationListener;
    import javax.servlet.http.HttpSessionBindingListener;
    import java.io.PrintWriter;
    import java.io.FileOutputStream;public final class MySessionListener
        implements HttpSessionActivationListener ,HttpSessionBindingListener ,
           HttpSessionAttributeListener, HttpSessionListener,ServletContextListener {
      
       ServletContext context;
       int users=0;   
       
       //HttpSessionActivationListener
       public void sessionDidActivate(HttpSessionEvent se) 
       {        
            logout("sessionDidActivate("+se.getSession().getId()+")");
       }
     
       public void sessionWillPassivate(HttpSessionEvent se) 
       {
        logout("sessionWillPassivate("+se.getSession().getId()+")");
       }//HttpSessionActivationListener
       
       //HttpSessionBindingListener
       public void valueBound(HttpSessionBindingEvent event) 
       {
            logout("valueBound("+event.getSession().getId()+event.getValue()+")");
       }
       public void valueUnbound(HttpSessionBindingEvent event) 
       {
        logout("valueUnbound("+event.getSession().getId()+event.getValue()+")");
       }
       
       //HttpSessionAttributeListener
        public void attributeAdded(HttpSessionBindingEvent event) {
    logout("attributeAdded('" + event.getSession().getId() + "', '" +
        event.getName() + "', '" + event.getValue() + "')");
        }    public void attributeRemoved(HttpSessionBindingEvent event) {
    logout("attributeRemoved('" + event.getSession().getId() + "', '" +
        event.getName() + "', '" + event.getValue() + "')");
        }
        
        public void attributeReplaced(HttpSessionBindingEvent se) 
        {
         logout("attributeReplaced('"+se.getSession().getId()+",'"+se.getName()+"','"+se.getValue()+"')");
        }//HttpSessionAttributeListener
         //HttpSessionListener
        public void sessionCreated(HttpSessionEvent event) {
    //用Hashtable来存放用户进行比较
    users++;
    logout("sessionCreated('" + event.getSession().getId() + "'),目前有"+users+"个用户");
    context.setAttribute("users",new Integer(users));
        }    public void sessionDestroyed(HttpSessionEvent event) {
    //在这里可以加入用户销毁时要进行的操作
    users--;
    logout("sessionDestroyed('" + event.getSession().getId() + "'),目前有"+users+"个用户");
    context.setAttribute("users",new Integer(users));    }//HttpSessionListener
        
        //ServletContextListener
        public void contextDestroyed(ServletContextEvent sce) {
    logout("contextDestroyed()-->ServletContext被销毁");
       this.context = null;
        }    public void contextInitialized(ServletContextEvent sce) {
    this.context = sce.getServletContext();
    logout("contextInitialized()-->ServletContext初始化了");
        }//ServletContextListener
        
        private void logout(String message) {     
        PrintWriter out=null;
        try
        {
         out=new PrintWriter(new FileOutputStream("c:\\session.txt",true));
         out.println(new java.util.Date().toLocaleString()+"::Form MySessionListener: " + message);
         out.close();
        }
        catch(Exception e)
        {
         out.close();
         e.printStackTrace();
        }
        }  
    }
      

  19.   

    相应的JSP文件一起贴出来执行操作:
    session.setAttribute("userName","creater")<br>
    <% session.setAttribute("userName","creater");%>
    session.setAttribute("userName","creater")<br>
    <% session.setAttribute("userName","creater");%>
    session.removeAttribute("userName","creater")<br>
    <% session.removeAttribute("userName");%>
    目前有<%=getServletContext().getAttribute("users")%>个用户。<br>
    after session.invalidate()<br>
    <% session.invalidate();%>
    目前有<%=getServletContext().getAttribute("users")%>个用户。