Re: Cookies and redirects

2002-03-13 Thread Enrico Sorcinelli

On Tue, 12 Mar 2002 16:23:57 +0100
Axel Andersson [EMAIL PROTECTED] wrote:

 Hello,
 I'm having trouble with both setting a cookie and redirecting the user to
 another page at the same time. It would appear the cookie is only sent
 when a normal header is sent by server.
 
 If I do the following (having baked the cookie first), where $r is the
 Apache-request() object:
 
   $r-content_type(text/html; charset=iso-8859-1);
   $r-send_http_header();
 

Hi,
a common trick to solve this is to use err_header_out() request method. For example:

use Apache::Constants qw(:common);
$r-err_header_out(Set-Cookie = $my_cookie );
$r-custom_response(SERVER_ERROR, $my_custom_redir_location);
return SERVER_ERROR;

Bye
Enrico

=
Enrico Sorcinelli - Gruppo E-Comm - Italia On Line S.p.a.
E-Mail: [EMAIL PROTECTED] - [EMAIL PROTECTED]
=



Re: Cookies and redirects

2002-03-12 Thread Geoffrey Young

Axel Andersson wrote:
 
 Hello,
 I'm having trouble with both setting a cookie and redirecting the user to
 another page at the same time. It would appear the cookie is only sent
 when a normal header is sent by server.
 

this is a common problem - you have to add the cookie to the
err_headers_out table instead of the headers_out table. 

if you are using Apache::Cookie then this is done for you, otherwise
you have to populate the correct set of headers.

see 

http://perl.apache.org/guide/snippets.html#Sending_Cookies_in_REDIRECT_Resp

or Recipes 3.7 and 3.13 in the mod_perl cookbook

--Geoff



Re: Cookies and redirects

2002-03-12 Thread Geoffrey Young


 Geoff: I think I did this with my own module with no success... I'd end
 up with an extra set of headers, if I was _lucky_...  

perhaps that is due to a general misunderstanding of err_headers_out -
they are sent _even_ on Apache errors (of which REDIRECT is considered
one), not _only_ on errors.  so, if you were setting headers_out to
capture normal transactions and err_headers_out for errors, you might
get an extra set of headers if you were not careful in your own coding
methodology.

 Also, when I got
 it to redirect OK, even when I saw the cookie, sometimes the browser
 would not eat the cookie properly...  I don't have more specific
 details, because this was months ago and the project was not (then)
 under CVS control (now it is, of course)...

well, details are good :) this sounds like a browser issue, though -
if you populate the err_headers_out table with a cookie it will be
presented to the client on a REDIRECT response.

nevertheless, Axel emailed me privately saying that err_headers_out()
solved his issues.

--Geoff



Re: Cookies and redirects

2002-03-12 Thread Hans Poo

El Mar 12 Mar 2002 11:23, Axel Andersson escribió:
 Hello,
 I'm having trouble with both setting a cookie and redirecting the user to
 another page at the same time. It would appear the cookie is only sent
 when a normal header is sent by server.

 If I do the following (having baked the cookie first), where $r is the
 Apache-request() object:

   $r-content_type(text/html; charset=iso-8859-1);
   $r-send_http_header();

 I get this header:

   Connection: close
   Date: Tue, 12 Mar 2002 10:39:05 GMT
   Server: Apache/1.3.23 (Unix) mod_perl/1.26
   Content-Type: text/html; charset=iso-8859-1
   Client-Date: Tue, 12 Mar 2002 10:39:05 GMT
   Client-Response-Num: 1
   Client-Transfer-Encoding: chunked
   Set-Cookie: user=12::7c786c222596437b; domain=animanga.nu; path=/;
 expires=Wed,
   12-Mar-2003 10:39:05 GMT

 Very nice and all, with cookie set. However, doing:

   $r-method_number(M_GET);
   $r-method(GET);
   $r-headers_in-unset(Content-length);
   $r-headers_out-add(Location = /users.pl);
   $r-status(REDIRECT);
   $r-send_http_header();

 Which I gather is the normal way to redirect a user, I get this header:

   Connection: close
   Date: Tue, 12 Mar 2002 10:38:36 GMT
   Server: Apache/1.3.23 (Unix) mod_perl/1.26
   Content-Type: text/html; charset=iso-8859-1
   Client-Date: Tue, 12 Mar 2002 10:38:36 GMT
   Client-Response-Num: 1
   Client-Transfer-Encoding: chunked

 Right, no Set-cookie there. So what's up? How do I redirect a browser,
 and set a cookie at the same time?

 Thanks in advance,
 Axel Andersson

Have you tried printing the headers_out hashref after sending the http header 
to see if the cookie is there ?.

my $headers_out = $r-headers_out;
foreach (keys %$headers_out) {
warn $_=$headers_out-{$_};
}

Hans