[mod_python] Cookies & Redirects

Daniel West dwmp at opti.cgi.net
Mon Aug 23 04:19:39 EDT 2004

Thanks for the very informative post Jim!  I was totally unaware of 
err_headers_out and your other suggestions were very helpful as 
well!  Thank you!


At 05:03 AM 8/23/2004 +0100, you wrote:
>On Sunday 22 August 2004 09:14, Daniel West wrote:
> > I have a script that needs to receive a request, set a cookie, and then
> > redirect to another location.  I'm using PSP on mod_python 3.1.3.  I'm not
> > getting the Set-Cookie header in the request response.
> > Why is it that mod_python seems to honor the Set-Cookie header for the OK
> > status code, but not the others?
>Your mistake is in assuming that adding something to req.headers_out will
>result in headers being sent out ;).
>For some reason, mod_python has separated the concept of response headers out
>into two separate types - headers that are sent out in normal conditions, and
>headers that are sent out in error conditions.  I would guess that raising
>any type of exception will cause mod_python to ignore normal headers (but
>still pull out Location in the case of HTTP_SEE_OTHER).
>In other words, the working version of the code you posted is:
>cookie = "..." # set the cookie to something
>req.err_headers_out.add('Set-Cookie', cookie) # note use of err_headers_out
>req.headers_out["Location"] = "http://..."
>raise apache.SERVER_RETURN, apache.HTTP_SEE_OTHER
>I personally think it's pretty silly to have two separate sets of headers, 
>guessing this is an internal Apache issue that is being exposed
>unnecessarily.  Especially in this case, it is nonsensical to consider a
>simple redirect to be an error condition that should ignore normal headers.
>Also note that using psp.redirect() instead of raising an exception provides
>the behaviour you want.  Another alternative is to set req.status to what you
>want and raise apache.OK.  Also, it appears whoever wrote util.redirect() is
>aware of the problem, as it manually sets req.status and then raises
>apache.OK, rather than simply raising an exception with the correct value.
>Under what circumstances is having separate sets of headers useful?  Does
>anybody actually need this?  It seems to me that it would be far more
>intuitive to have headers_out sent for every type of response.  At the very
>least, 3xx status codes should not be treated as an error condition (that's
>what 4xx and 5xx are for).
>Jim Dabell
>Mod_python mailing list
>Mod_python at modpython.org

More information about the Mod_python mailing list