In the HTTP protocol, there is no explicit termination signal when a client is no longer active. This means that the only mechanism that can be used to indicate when a client is no longer active is a timeout period. The default timeout period for sessions is defined by the servlet container and can be obtained via the getMaxInactiveInterval method of the HttpSession interface. This timeout can be changed by the Developer using the setMaxInactiveInterval method of the HttpSession interface. The timeout periods used by these methods are defined in seconds. By definition, if the timeout period for a session is set to -1, the session will never expire.
Remember, the setMaxInactiveInterval() method of HttpSession set an interval in seconds, whereas the deployment descriptor <session-config> element is specified in minutes. Add to this the other discrepency that the setMaxInactiveInterval() method requires a negative-value argument to ensure that the session never expires, whereas the <session-timeout> value in the DD can be 0 or less to achieve the same.