[mod_python] Internal redirect does not end processing and session is not saved on internal redirect - mpservlets

Graham Dumpleton grahamd at dscpl.com.au
Fri Apr 1 06:18:21 EST 2005

A delayed response. :-)

> Scott Chapman wrote:
>> Here's my uberServlet which demonstrates this "interesting" behavior. 
>>  If I use the external redirect and comment out the internal 
>> redirect, everything works perfectly.
>> Note that I have changed mpservlets to call prep BEFORE auth.  This 
>> makes better sense to me.

It is never a good idea to change third party pages in a way that makes
yours different to everyone else. If you ever upgrade and forget the
change you had made you will break your own code.

Also, the "auth()" method provided with mpservlets is there specifically
for dealing with HTTP basic authentication and it doesn't look to me 
it is intended that it be overridden to substitute your own 
mechanism. That it is called before any session creation makes it hard 
do that anyway.

Rather than swap the order of "auth()" and "prep()" you would have been
better off simply doing your authentication and session management 
the scope of "respond()" and ignore the existing "auth()" method. Ie.,

   def respond(self):

Where "myauth()" contains the code currently in your "auth()" and 
containing the code currently in your "respond()".

Do it that way and you don't have to fiddle the mpservlets code.

On 29/03/2005, at 9:45 AM, Scott Chapman wrote:

> I'm not sure how to transfer the session to the internal redirect at 
> this point.  It would be nice if that worked because I'm pretty sure 
> I'll need it later.  This is a brand new session and no cookie has 
> been sent to the browser at the time of the internal redirect so 
> things don't work very well there.  How should I transfer the session 
> to the internally redirected URI?

You can't transfer any new session through to a handler triggered as a 
of an internal redirection, AFAIK it must be bounced back to the 
browser in some

There are other restrictions on using internal redirection as well 
which mean
it isn't the magic pill some might think it is.

First, you can't stash data in the req object and have it passed 
through the
internal redirect because only the original Apache req object core is 

Second, if the top level servlet handler has already processed the form
parameters, ie. with util.FieldStorage, and the form request was 
as a POST, the handler triggered by the redirection will not be able to
access the form parameters. This is because util.FieldStorage has 
consumed all the request content, it can't be done a second time and the
first form object can't be passed through the req object. This problem
affects mod_python.publisher and mpservlets.

Third, (from memory) if the original URL mapped to a physical directory 
was a POST request, when an internal redirection is done it magically 
into a GET request and even if the top level handler didn't process the
form data, the sub handler can't get to the form data as 
thinks it was a GET request and not the POST request it was. This issue
came up sometime in the last month and I think that was what the outcome

Anyway, hope this might make you think twice about relying too much on 
redirections, at least in a system where some amount of processing is 
prior to the actual redirection. :-)


More information about the Mod_python mailing list