I've got a situation where I have two different webapps running on a single server, using different ports. They're both running Java's Jetty servlet container, so they both use a cookie parameter named JSESSIONID to track the session id. These two webapps are fighting over the session id.
- Open a Firefox tab, and go to WebApp1
- WebApp1's HTTP response has a set-cookie header with JSESSIONID=1
- Firefox now has a Cookie header with JSESSIONID=1 in all it's HTTP requests to WebApp1
- Open a second Firefox tab, and go to WebApp2
- The HTTP reqeust to WebApp2 also has a Cookie header with JSESSIONID=1, but in the doGet, when I call
req.getSession(false);
I getnull
. And if I callreq.getSession(true)
I get a new Session object, but then the HTTP response from WebApp2 has a set-cookie header with JSESSIONID=20 - Now, WebApp2 has a working Session, but WebApp1's session is gone. Going to WebApp1 will give me a new session, blowing away WebApp2's session.
- Continue forever
So the Sessions are thrashing between each web app. I'd really like for the req.getSession(false)
to return a valid session if there's already a JSESSIONID cookie defined.
One option is to basically reimplement the Session framework with a HashMap and cookies called WEBAPP1SESSIONID and WEBAPP2SESSIONID, but that sucks, and means I'll have to hack the new Session stuff into ActionServlet and a few other places.
This must be a problem others have encountered. Is Jetty's HttpServletRequest.getSession(boolean)
just crappy?