X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=tools%2Fmod_perl%2FMyApache2%2FCopyCookie.pm;fp=tools%2Fmod_perl%2FMyApache2%2FCopyCookie.pm;h=3e29647b559845b6e2d2a621e01fe7061b5d2e1f;hp=0000000000000000000000000000000000000000;hb=641e2f9f931b5440ce86af8f5d67df296a21192c;hpb=91f73c93cb0f226e251db72219b67ed416c1f639 diff --git a/tools/mod_perl/MyApache2/CopyCookie.pm b/tools/mod_perl/MyApache2/CopyCookie.pm new file mode 100644 index 0000000..3e29647 --- /dev/null +++ b/tools/mod_perl/MyApache2/CopyCookie.pm @@ -0,0 +1,41 @@ +package MyApache2::CopyCookie; + +use Apache2::Filter (); +use Apache2::RequestRec (); +use APR::Table (); + +use Apache2::Const -compile => qw(OK); + +use constant BUFF_LEN => 1024; + +sub handler { + my $f = shift; + + # If the server generated a new cookie, make it available in a + # header other than the magic "Cookie" that clients can't read. + my $ho = $f->r->headers_out; + my $cookie = $ho->get('Set-Cookie'); + if (defined $cookie && $cookie ne "") { + $ho->set('X-Set-Cake', $cookie); + } + + # If the client sent an existing cookie as X-Cake, but didn't + # set Cookie, copy the former to the latter. + my $hi = $f->r->headers_in; + $cookie = $hi->get('Cookie'); + if (!defined $cookie || $cookie eq "") { + $cookie = $hi->get('X-Cake'); + if (defined $cookie && $cookie ne "") { + warn "copying X-Cake '$cookie' to Cookie"; + $hi->set('Cookie', $cookie); + } + } + + while ($f->read(my $buffer, BUFF_LEN)) { + $f->print($buffer); + } + + return Apache2::Const::OK; +} + +1;