Search code examples
javasessionsession-timeoutsessionidservlet-listeners

sessionlistner not working when user closes the browser


in the below code sessionCreated is working when ever new session is created. but sessionDestroyed is working only if we're invoke session.invalidate(); how can i make it work, in following situations **

1)user closes the browser

2)system poweroff

3)session timeout**

 import java.util.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 public class SesListener implements HttpSessionListener 
 {
long sttime,endtime;
public void sessionCreated(HttpSessionEvent se)
{
    sttime=System.currentTimeMillis();
    HttpSession ses=se.getSession();
    ServletContext sc=ses.getServletContext();
    sc.log("session started at "+new Date());
    System.out.println("session started at "+new Date());
}

public void sessionDestroyed(HttpSessionEvent se)
{

    endtime=System.currentTimeMillis();
    HttpSession ses=se.getSession();
    ServletContext sc=ses.getServletContext();
    sc.log("session ended at "+new Date());
    System.out.println("session ended  at "+new Date());
}
 }

and my .xml file is

 <listener>
   <listener-class>SesListener</listener-class>
 </listener>

Solution

  • There is no reliable way we can contact server to invalidate session, For eg: Network loss/power loss : (no way server can be contacted)

    But on browser close you may capture browser close event of user using onunload event and trigger a request to log out.

    Also during session timeout listener’s sessionDestroyed() will be executed