[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Jetty does not remove timed-out session, if the session was replaced in runtime

Hi, 

the following fix seems to fix the bug:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.session.SessionHandler;

public class MySessionHandler extends SessionHandler {

    @Override
    public void doScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        HttpSession oldSession = request.getSession(false);
        super.doScope(target, baseRequest, request, response);
        HttpSession newSession = request.getSession(false);

        if (newSession != null && oldSession != newSession) {
            getSessionManager().complete(newSession);
        }
    }

}


<Set name="sessionHandler">
         <New class="com.playtech.chatweb.MySessionHandler">
         </New>
</Set>


On Tue, Apr 24, 2012 at 5:46 PM, Michael Elman <tarlog@xxxxxxxxx> wrote:
Hi,

n the application, we use to switch sessions once the user mode is changed.

So basically we have something like this:

request.getSession(false).invalidate();
request
.getSession(true);

Now happens the problem: after timeout, the session is not removed. After debugging some internal code, I found out that in org.eclipse.jetty.server.session.AbstractSession.timeout() the session is not removed if _requests > 0. And the _requests is greater then zero, since in org.eclipse.jetty.server.session.SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) the complete() runs on the access session is increased and the same session is decreased, even if during the invocation the actual session was replaced!

Did anyone experience the same problem and managed to solve it?


Thanks,

Michael

P.S. This question was also posted at Stackverflow at http://stackoverflow.com/q/10300283/547779