Yep, I do implement HttpSessionBindingListener and no I can't call 
invalidate because I depend on other objects bound to the session within my 
session tracker and invalidate does not define the order at which it will 
unbind objects.  Therefore I need to do an explicit removeAttribute call so 
that I am assured the rest of the objects I need are still within the session.

For reference here is my code

import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import edu.vt.ward.lexus.portal.User.*;

public class SessionTracker implements HttpSessionBindingListener{

         private String userPid;
         private ServletContext context;
         private Hashtable currentSessions;

         public SessionTracker (ServletContext ctx){
                 context = ctx;
         }

         public void valueBound(HttpSessionBindingEvent event) {
                 HttpSession session = event.getSession();
                 User user = (User) session.getAttribute("user");
                 userPid = user.getPid();
                 String totalLogins;

                 if(context.getAttribute("currentSessions") == null){
                         currentSessions = new Hashtable();

                         Date uptime = new Date(System.currentTimeMillis());
                         context.setAttribute("uptime", uptime);

                         totalLogins = "0";
                 }else{
                         currentSessions = (Hashtable) 
context.getAttribute("currentSessions");
                         totalLogins = (String) 
context.getAttribute("totalLogins");
                 }
                 Date creationTime = new Date(session.getCreationTime());

                 currentSessions.put(userPid, creationTime);
                 context.setAttribute("currentSessions", currentSessions);

                 int logins = Integer.parseInt(totalLogins) + 1;
                 totalLogins = Integer.toString(logins);
                 context.setAttribute("totalLogins", totalLogins);
         }

         public void valueUnbound(HttpSessionBindingEvent event) {
                 HttpSession session = event.getSession();
                 User user = (User) session.getAttribute("user");
                 userPid = user.getPid();

                 Hashtable currentSession = (Hashtable) 
context.getAttribute("currentSessions");
                 currentSessions.remove(userPid);

                 context.setAttribute("currentSessions", currentSessions);
         }
}

At 10:37 AM 4/10/2001, you wrote:

>Chad,
>
>I am doing something very similar...
>
>Are you implementing the HttpSessionBindingListener interface in your
>object?  If not, try implementing this interface in your object that is
>placed in the session.  This will throw a 'valueBound' event when the object
>is placed in the session and a 'valueUnbound' event when removed (either
>explicitly or by timeout).  The valueBound method will increment the count,
>and the valueUnbound method will decrement it.  Works perfectly for me.
>
>Also, you might want to use session.invalidate() rather than explicitly
>removing the session objects-- I found it was easier to manage.
>
>HTH,
>
>Mike
>
>
>
>
>-----Original Message-----
>From: Chad LaJoie [mailto:[EMAIL PROTECTED]]
>Sent: Tuesday, April 10, 2001 10:25 AM
>To: [EMAIL PROTECTED]
>Subject: Session timeouts
>
>
>          I have been experiencing some problems with sessions timeouts.  It
>seems that they are not unbinding all my sessions attributes.  For
>instance.  I have a session tracker object that gets bound to a user's
>session when they log in.  This  simply adds 1 to an application level
>attribute indicating the number of people who are currently logged
>in.  When the user's logs out I call session.removeAttribute("tracker");
>explicitly and the attribute is unbound.  This decrements the application
>attribute by 1.  This all works fine.  However if the session actually
>time's out the tracker object doesn't seem to be unbound.  I.e. my little
>session tracker program still show the user as loged in.
>          Has anyone else encountered this problem, and if so is there a
>solution for it?
>
>Env:
>          Tomcat 3.2.1
>          Sun JDK 1.3.0_1
>          Apache 1.3.19
>          Solaris 8
>
>Chad La Joie                           "Only a man who can not conquer
>IT Specialist                             his deficiencies feels the need to
>IS&C - WARD                             convince the world he has none"
>

Chad La Joie                           "Only a man who can not conquer
IT Specialist                             his deficiencies feels the need to
IS&C - WARD                             convince the world he has none"

Reply via email to