I'm trying to build a mp2 handler to login using mod_auth_tkt2. I like the idea 
of probing if
the client can support cookies, so tried to rebuild it. According to the cgi 
example there
is some problem with setting the cookie on a redirect. The same problem - no probe cookie is set during the redirect - occurs when I use the following method, and I can't see why.

#-------------------------------------------------------------------------
sub login: method
#-------------------------------------------------------------------------
{
   my ( $class, $r ) = @_;

   #$r->print('sub run ', B::Deparse->new->coderef2text( \&run ));
   my $apr = Apache2::Request->new($r);

   ### Check if there are any cookies defined
   my $jar = Apache2::Cookie::Jar->new( $r );
   my $cookie = $jar->cookies( 'tkt' );
   my $probe  = $jar->cookies( 'probe' );
   my $has_cookies = $cookie ||
                     $probe  || '';
   if ( ! $has_cookies ){
      ### if this is a self redirect warn the user about cookie support
      if ( $apr->param( 'redirect' ) ) {
         my @remarks = ( 'Your browser does not appear to support cookies.',
                         'This site requires cookies - please turn cookie 
support' );
         my $detail = join '&', map { sprintf "detail=%s", $_ } @remarks;
         $r->internal_redirect_handler( "/error?type=400&$detail" );
         return Apache2::Const::OK;
      }
      ### If no cookies and not a redirect, redirect to self to test cookies.
      else {
         $cookie = Apache2::Cookie->new( $r,
                                         -name   => "probe",
                                         -domain => 'my.domain',
                                         -value  => 1 );
         $cookie->path("/");
         $cookie->bake( $r );
         $r->headers_out->set( Location => "/login?redirect=1" );

         return Apache2::Const::REDIRECT;
      }
   }
}

Reply via email to