The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApache::basic;

use strict;
use warnings FATAL => 'all';

use File::Path ();

my $MOD_PERL;
my $REQ_CLASS;

BEGIN
{
    if ( $ENV{MOD_PERL} =~ /(?:1\.9|2\.\d)/ )
    {
        eval <<'EOF';
    use Apache2::Request;
    use Apache2::Cookie;
    use Apache2::Const qw(OK);
    use Apache2::RequestRec;
    use Apache2::RequestUtil;
EOF

        die $@ if $@;

        $MOD_PERL = 2;
        $REQ_CLASS = 'Apache2::Request';
    }
    else
    {
        eval <<'EOF';
    use Apache::Request;
    use Apache::Constants qw(OK);
EOF

        die $@ if $@;

        $MOD_PERL = 1;
        $REQ_CLASS = 'Apache::Request';
    }
}

use Apache::Session::Wrapper;

sub handler ($$) : method
{
    my $class = shift;

    my $r = $REQ_CLASS->new(shift);
    Apache2::RequestUtil->request($r)
        if $MOD_PERL == 2;

    my $dir = $r->dir_config('SessionDir');
    File::Path::mkpath( $dir, 0, 0755 );

    $r->content_type('text/plain');

    my $output = '';

    eval
    {
        my $w =
            Apache::Session::Wrapper->new
                ( class          => 'File',
                  directory      => $dir,
                  lock_directory => $dir,
                  use_cookie     => 1,
                  cookie_name    => 'asw_cookie',
                  cookie_expires => '10m',
                  cookie_path    => '/',
                  cookie_resend  => 1,
                  always_write   => 1,
                  header_object  => $r,
                );

        $output .= "SESSION: " . $w->session->{_session_id} . "\n";

        $w->delete_session() if $r->param('delete');
    };

    $output .= "ERROR: $@" if $@;

    $r->send_http_header
        if $MOD_PERL == 1;

    print $output;

    return OK;
}

1;