Question

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>
Was it helpful?

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top