Hi,

I noticed that in o.a.c.cluster.session.JvmRouteBinderValve there is a
block of code
that basically prevents changing a session's jvmRoute if URL rewriting is used:

if (request.isRequestedSessionIdFromURL

()) {
  if (log.isDebugEnabled())
      log.debug(sm.getString("jvmRoute.skipURLSessionIDs"));
} else {
      handleJvmRoute( request, response,session.getIdInternal(), jvmRoute);
}



This basically means that if cookies are disabled and a session fails over, the
jvmRoute portion of the session id won't be changed. AIUI, if this
isn't changed,
thereafter mod_jk will not pin the session to any server. That's a pretty big


limitation to distributed sessions.

In JBoss clustering we have a similar valve that has pretty much the
same limitation.

Does anyone know any reason for this limitation? If cookies are disabled, we


of course shouldn't emit a cookie, but why not change the id of the
session object?
Looking at how Response.encodeURL works, it uses the session object's
id when encoding,
so if we change this field, any subsequently emitted URLs should have
the proper id


with the new jvmRoute. This valve is invoked before the request enters
the webapp, so
the id change will take place before the webapp writes any URLs.

Thanks!

Brian Stansberry
Lead, AS Clustering


JBoss, Inc.

Reply via email to