I don't believe so. Someone please correct me if I am wrong. -----Original Message----- From: David Kerber [mailto:[EMAIL PROTECTED] Sent: Thursday, February 09, 2006 12:09 PM To: Tomcat Users List Subject: Re: Logging session timeouts
That got me going; thanks! One more question: Is there any way of telling if the session was actively invalidated, or if it timed out? Looking at the docs for HttpSessionBindingEvent, I don't see any differentiation between them. That's not a big deal, but would be nice to have. Dave Tim Lucia wrote: >Add the following fragment to your web.xml: > > <!-- Session Counting Filter --> > <!-- Every request passing through this filter will be checked for a --> > <!-- newly-created session, which will be then counted against the --> > <!-- total sessions using this application. --> > <filter> > <filter-name>SessionCountFilter</filter-name> > <filter-class>SessionCountFilter</filter-class> > </filter> > <filter-mapping> > <filter-name>SessionCountFilter</filter-name> > <url-pattern>/*</url-pattern> > </filter-mapping> > > >-----Original Message----- >From: David Kerber [mailto:[EMAIL PROTECTED] >Sent: Thursday, February 09, 2006 10:56 AM >To: Tomcat Users List >Subject: Re: Logging session timeouts > >I got your code in, and it compiles, but I don't understand how I >configure the url-mapping you refer to. Could you point me to some >docs for that? I looked through the web.xml files (both the server >one, and the one for the app), but couldn't find anything about >url-mapping or filters that seemed to apply to this. It may be there, >but I don't know enough about it to recognize it. > >Thanks! >Dave > > >Tim Lucia wrote: > > > >>Below is a filter which keeps track of how many sessions are attached >>to a web app. The key part is the HttpSessionBindingListener interface. >> >>Tim >> >> >>/** >>* J2EE "Filter" to count page hits. What it counts depends on the >>url-mapping >>* in web.xml. >>* >>* @author tim.lucia >>*/ >>public class SessionCountFilter >> implements Filter, HttpSessionBindingListener, Serializable { >> private final static Log logger = >>LogFactory.getLog(SessionCountFilter.class); >> >> public static final Hashtable sessions = new Hashtable(); >> public static int sessionCountHighWater = 0; >> >> /** >> * Container startup notification >> */ >> public void init(FilterConfig arg0) throws ServletException >> { >> logger.debug("init(): " + arg0); >> } >> >> /** >> * Container shutdown notification >> */ >> public void destroy() >> { >> logger.debug("destroy()"); >> } >> >> /** >> * Process the container's filter request. >> * @param request - Request object >> * @param response - response object >> * @param chain - next filter in the chain. >> */ >> public void doFilter(ServletRequest request, ServletResponse response, >> FilterChain chain) >> throws IOException, ServletException >> { >> chain.doFilter(request, response); >> >> HttpServletRequest httpRequest = (HttpServletRequest)request; >> HttpSession session = httpRequest.getSession(false); >> if (logger.isDebugEnabled()) { >> logger.debug("Request " + httpRequest.getRequestURI() + >> (session == null ? " returned no session" : >> " belongs to session ID " + session.getId())); >> } >> >> // Bind to the session, if there is one, and it is new: >> if (null != session && session.isNew()) { >> session.setAttribute(toString(), this); >> } >> } >> >> /** >> * Implement HttpSessionBindingListener#valueBound >> */ >> public void valueBound(HttpSessionBindingEvent bindEvent) >> { >> HttpSession session = bindEvent.getSession(); >> final String sessionID = session.getId(); >> sessions.put(session, sessionID); >> if (logger.isDebugEnabled()) { >> logger.debug("[" + sessions.size() + "] CREATE: " + >> >> >sessionID); > > >> } >> sessionCountHighWater = >> (sessionCountHighWater < sessions.size() ? sessions.size() : >>sessionCountHighWater); >> } >> >> /** >> * Implement HttpSessionBindingListener#valueUnbound >> */ >> public void valueUnbound(HttpSessionBindingEvent bindEvent) >> { >> HttpSession session = bindEvent.getSession(); >> final String sessionID = (String)sessions.get(session); >> sessions.remove(session); >> if (logger.isDebugEnabled()) { >> logger.debug("[" + sessions.size() + "] DESTROY: " + >> >> >sessionID); > > >> } >> } >> >> /** >> * Return current count of sessions >> * @return The number of sessions currently tracked >> */ >> public static int getSessionCount() >> { >> return sessions.size(); >> } >> >> /** >> * Return high water mark of number of sessions >> * @return The high water mark of sessions tracked >> */ >> public static int getSessionCountHighWater() >> { >> return sessionCountHighWater; >> } >> >> /** >> * Return string representation of this object >> * @return a String representation of this object >> */ >> public String toString() >> { >> return getClass().getName() + "#" + hashCode(); >> } >>} >> >>-----Original Message----- >>From: David Kerber [mailto:[EMAIL PROTECTED] >>Sent: Thursday, February 09, 2006 9:38 AM >>To: Tomcat Users List >>Subject: Logging session timeouts >> >>Is there any way of trapping session timeouts, so I can log them? I >>am logging when a user logs in and when they explicitly log out, but >>would like to log when their session times out, if that is possible. >> >>TIA! >>Dave >> >> >> >>--------------------------------------------------------------------- >>To unsubscribe, e-mail: [EMAIL PROTECTED] >>For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >>--------------------------------------------------------------------- >>To unsubscribe, e-mail: [EMAIL PROTECTED] >>For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >> >> >> >> > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]