After some testing, I determined that appending the session ID to the URL will not work. I can, however, add the session ID as a new HTTP header, but I have to determine which modules to use (mod_headers, mod_proxy, mod_proxy_http, mod_proxy_balancer?) and how to configure sticky sessions using the new HTTP header. I am somewhat unfamiliar with this aspect of Apache, so is anyone able to point me in the right direction?
Thanks -----Original Message----- From: André Warnier [mailto:a...@ice-sa.com] Sent: Friday, July 29, 2011 11:36 AM To: Tomcat Users List Subject: Re: Sticky Session Not Working With Apache 2.0.54 and Tomcat 7.0.8 Lataxes, Karl wrote: > I believe this may what you requested. The parameter information I extracted > from the request was contained in the request body, as well as the session ID > I mentioned previously. If we need to include additional coding in both our > servlet and client software, then it's better we find out now. > > URL: http://<host>:<port>/<servlet_path>/servlet/<servlet_name>/ > PATH: / > HEADER INFORMATION > HEADER: user-agent 'Java/1.6.0_16' > HEADER: host '<host>:<port>' > HEADER: accept 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2' > HEADER: connection 'keep-alive' > HEADER: content-type 'application/x-www-form-urlencoded' > HEADER: content-length '134' > > PARAMETER INFORMATION > PARAM: <parameter_name> '<parameter_value>' > > > -----Original Message----- > From: Rainer Jung [mailto:rainer.j...@kippdata.de] > Sent: Friday, July 15, 2011 3:22 PM > To: users@tomcat.apache.org > Subject: Re: Sticky Session Not Working With Apache 2.0.54 and Tomcat > 7.0.8 > > On 15.07.2011 18:19, Lataxes, Karl wrote: >> We do not send cookies. >> >> Our clients are not web pages but applications embedded in proprietary >> hardware, which connect to our network via landline telephone or cell modem >> and access our servlet via HTTP connection. The servlet responds by sending >> a message containing several parameters in name-value pair format, including >> a session id that appears as: "session-id= >> <unique_client_identifier>-<current_time_in_milliseconds>". The client will >> respond to the servlet with a message that contains the same session id >> name-value pair. After initial connection, all client-server communications >> will contain this unique session id name-value pair. >> >> Apache will forward the requests/responses as expected when a single Tomcat >> node is running. However, for multiple nodes, the requests are forwarded >> round robin to all nodes. Our system environment prevents us from using >> session replication between nodes, so we have to use sticky sessions. >> >> I do not believe the problem is with Tomcat, but rather how mod_jk routes >> the requests. Is there any way to configure mod_jk so that it will >> recognize the session id name-value pair? > > I did understand your question, but you still did not give the information > hntains the session id. > > The protocol spoken is HTTP and Apache is an HTTP server. So you need to get > used to the appropriate language in order to allow us to understand and give > a correct answer. That's why I suggested words as query parameters, path > info, request headers etc. > > If the session id is send by the client as part of the request body, then it > will become complex and I currently see no solution without a bit of coding. > If the id is in headers or somewhere in the URL, you could likely design a > solution using mod_proxy_balancer. > > Regards, > > Rainer > > >> -----Original Message----- >> From: Rainer Jung [mailto:rainer.j...@kippdata.de] >> Sent: Friday, July 15, 2011 9:44 AM >> To: users@tomcat.apache.org >> Subject: Re: Sticky Session Not Working With Apache 2.0.54 and Tomcat >> 7.0.8 >> >> On 15.07.2011 12:48, Lataxes, Karl wrote: >>> Our servlet assigns a session id to a client when it initially contacts the >>> server. The session id consists of "session-id", a unique client >>> identifier, and the current time in milliseconds, which is used as session >>> identification for subsequent requests. There are numerous message >>> exchanges between the servlet and client during a typical session, all of >>> which contain the session id. Once the session has successfully ended, the >>> session id is removed from the servlet. >>> >>> Is there any way we can configure mod_jk to recognize the session id in >>> order to route subsequent messages to the original Tomcat node it initially >>> contacted? >> How does the client present the session id as part of the requests? >> Query parameter, path info, request header, cookie, ...? >> >> Can you five a complete example? >> >> Regards, >> >> Rainer > My 0.02 € : It looks like Karl has access to the source code of the client side, as well as the servlet's. One thing that might help already a lot, is if the client was adding the session-id to each request, either - by appending it to the request URL, as : http://<host>:<port>/<servlet_path>/servlet/<servlet_name>/....;jsessionid=<session-id> AND/OR - by adding a specific HTTP header, like : X-SESSION-ID: <session-id> That is because it is a lot easier, on the server side, to retrieve information from the URL or from a HTTP header, than it is from a request body. And there already exists code in the server to do this. (Talking about the Apache http front-end, mod_rewrite and mod_headers for instance) The servlet could also add the session-id as a HTTP response header, which may be also easier for the client to retrieve (depending on what HTTP library is being used there). I am not really familiar with the way in which mod_jk handles sticky sessions, but I would imagine that a suffix to the request URL, as indicated above, should be usable, no ? (Maybe it also needs to contain an identifier for the specific Tomcat (worker) to which the call should be routed) Now just by curiosity : are we talking about audience metrics here ? --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org