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>
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