I think it's a bug too, but the first call to header just drops all arguments - passing a CGI object is irrelevant (to header, !1 was talking about new). Here's sub header() from CGI::Session v3.95
sub header {
my $self = shift;
my $cgi = $self->{_SESSION_OBJ};
unless ( defined $cgi ) {
require CGI;
$self->{_SESSION_OBJ} = CGI->new();
return $self->header();
}
my $cookie = $cgi->cookie($self->name(), $self->id() );
return $cgi->header(
-type => 'text/html',
-cookie => $cookie,
@_
);
}
The first call to CGI::Session::header instantiates a CGI object ($self->{_SESSION_OBJ}), then calls $self->header() without any of the parameters originally passed. The second call, the CGI object already exists and sub header handles all the arguments.
Here's a minimal patch for CGI::Session (untested)
1222c1222
< return $self->header();
---
> $cgi = $self->{_SESSION_OBJ};
A workaround for the OP would be to call it twice - ie
# call header to instantiate CGI object, but throw away the result
$sess->header();
# _now_ print the header
print $sess->header(expires => '+1M');
__END__
output:
Set-Cookie: CGISESSID=e438a0cb3647f362bd9934d048dca443; path=/
Expires: Mon, 18 Oct 2004 21:52:43 GMT
Date: Mon, 18 Oct 2004 21:42:43 GMT
Content-Type: text/html; charset=ISO-8859-1
Update: modified the patch
Update 2: went to rt.cpan.org, and !1's patch is almost the same...
|