How about 'discard_temporary_cookies'?  I like to think in terms of 'permanent' and 
'temporary'.

-- Monte Leng

Gisle Aas wrote:

> Mike Schilli <[EMAIL PROTECTED]> writes:
>
> > > I agree it might be useful to add something like this.  I don't like
> > > the name you selected though.  The term "session" is used differently
> > > in RFC 2965.
> >
> > Hmm ... let me throw in another suggestion: in order to distinguish
> > cookies which are cleared at browser shutdown from those which remain in
> > the jar beyond that point, they're commonly called "session cookies" vs.
> > "permanent cookies". Also, the following excerpt from RFC 2965 seems to
> > encourage that term:
> >
> > "...Otherwise a cookie persists (resources permitting) until whichever
> > happens first, then gets discarded: its Max-Age lifetime is exceeded;
> > or, if the Discard attribute is set, the user agent terminates the
> > session."
>
> As I read RFC 2965; a "session" last as long as the user agent is
> willing to send back the cookie headers.  It does not make a
> difference if the cookies has a Max-Age or a Discard attribute.  The
> section you quoted could also be read that way.  The state management
> session will in this case end when the user agent terminates because
> the cookie had Discard set.  If it did not then the session might
> outlive the user agent.
>
> > discard() is short and sweet but could be interpreted in a way that
> > permanent cookies would be discarded as well, which is not the case.
> > Would you be ok with "discard_session_cookies()"?
>
> I have applied your patch, but I'm still considering changing the
> method name.  I still think 'session' is wrong in this context.
>
> How about 'clear_discardable_cookies'.  A bit on the long side?
>
> > I've also added code for cookies marked with the "Discard" flag as you
> > suggested and attached test case #36 to t/base/cookies.t. Please find
> > the patch file attached (hope that's ok, since it has some lengthy
> > lines).
>
> The patch applied just fine.  Thank you!
>
> Regards,
> Gisle
>
> > --- libwww-perl-5.63/lib/HTTP/Cookies.pm      Fri Oct 26 15:45:28 2001
> > +++ libwww-perl-5.64/lib/HTTP/Cookies.pm      Sat Feb  2 15:29:18 2002
> > @@ -652,6 +652,26 @@
> >      join("\n", @res, "");
> >  }
> >
> > +=item $cookie_jar->discard_session_cookies( );
> > +
> > +Discard all session cookies. Scans for all cookies in the jar
> > +with either no expire field or a true C<discard> flag. To be
> > +called when the user agent shuts down according to RFC 2965.
> > +
> > +=cut
> > +
> > +sub discard_session_cookies
> > +{
> > +    my($self) = @_;
> > +
> > +    $self->scan(sub {
> > +        if($_[9] or        # "Discard" flag set
> > +           not $_[8]) {    # No expire field?
> > +            $_[8] = -1;            # Set the expire/max_age field
> > +            $self->set_cookie(@_); # Clear the cookie
> > +        }
> > +      });
> > +}
> >
> >  sub _url_path
> >  {
> > diff -Naur libwww-perl-5.63/t/base/cookies.t libwww-perl-5.64/t/base/cookies.t
> > --- libwww-perl-5.63/t/base/cookies.t Fri Jul 20 13:02:39 2001
> > +++ libwww-perl-5.64/t/base/cookies.t Sat Feb  2 16:12:11 2002
> > @@ -1,4 +1,4 @@
> > -print "1..35\n";
> > +print "1..36\n";
> >
> >  #use LWP::Debug '+';
> >  use HTTP::Cookies;
> > @@ -565,6 +565,38 @@
> >  Set-Cookie3: trip.appServer="1111-0000-x-024"; path="/"; domain=".trip.com"; 
>path_spec; discard; version=0
> >  Set-Cookie3: JSESSIONID="fkumjm7nt1.JS24"; path="/trs"; domain="www.trip.com"; 
>path_spec; discard; version=1
> >  EOT
> > +
> > +#-------------------------------------------------------------------
> > +# Test if session cookies are deleted properly with
> > +# $jar->discard_session_cookies()
> > +
> > +$req = HTTP::Request->new('GET', 'http://www.perlmeister.com/scripts');
> > +$res = HTTP::Response->new(200, "OK");
> > +$res->request($req);
> > +   # Set session/perm cookies and mark their values as "session" vs. "perm"
> > +   # to recognize them later
> > +$res->push_header("Set-Cookie"  => qq(s1=session;Path=/scripts));
> > +$res->push_header("Set-Cookie"  => qq(p1=perm; 
>Domain=.perlmeister.com;Path=/;expires=Fri, 02-Feb-$year_plus_one 23:24:20 GMT));
> > +$res->push_header("Set-Cookie"  => qq(p2=perm;Path=/;expires=Fri, 
>02-Feb-$year_plus_one 23:24:20 GMT));
> > +$res->push_header("Set-Cookie"  => 
>qq(s2=session;Path=/scripts;Domain=.perlmeister.com));
> > +$res->push_header("Set-Cookie2" => qq(s3=session;Version=1;Discard;Path="/"));
> > +
> > +$c = HTTP::Cookies->new;  # clear jar
> > +$c->extract_cookies($res);
> > +# How many session/permanent cookies do we have?
> > +my %counter = ("session_after" => 0);
> > +$c->scan( sub { $counter{"${_[2]}_before"}++ } );
> > +$c->discard_session_cookies();
> > +# How many now?
> > +$c->scan( sub { $counter{"${_[2]}_after"}++ } );
> > +print "not " if   # a permanent cookie got lost accidently
> > +                $counter{"perm_after"} != $counter{"perm_before"} or
> > +                  # a session cookie hasn't been cleared
> > +                $counter{"session_after"} != 0 or
> > +                  # we didn't have session cookies in the first place
> > +                $counter{"session_before"} == 0;
> > +#print $c->as_string;
> > +print "ok 36\n";
> >
> >  #-------------------------------------------------------------------
> >

Reply via email to