Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I'm using the HTTP::Cookies module in combo with LWP::UserAgent. My script access a webpage and retrieves the cookie information. I then use the as_string() method of HTTP::Cookies to save the cookie info as a BLOB in a MySQL database.

I would like to be able to retrieve the cookie info from the db and then create a new HTTP::Cookies object with it. However, HTTP::Cookies only has a load() function that loads cookie info from a file. Is there anyway to load the cookie information from the db into a HTTP::Cookies object without first writing it to a file and then reading it from the file?

Thanks.

Replies are listed 'Best First'.
Re: LWP Cookies
by repson (Chaplain) on Feb 11, 2001 at 14:13 UTC
    If you look at the HTTP::Cookies source code, then you can see that the $cookie_jar->load() method does no sanity checking on its filename argument. Instead it passes it unchanged to open. We can use this as a feature.
    my $cookies = new HTTP::Cookies; $cookies->set_cookie(0,'foo','foog','/','.blah.com','80',0,0,1000,1,{} +); $cookies->set_cookie(0,'moo','1025','/','.blah.com','80',0,0,1000,1,{} +); my $text = $cookies->as_string; # do anything to $text, and come back later pipe Read, Write; print Write "#LWP-Cookies-1.0\n" . $text; close Write; my $cook = new HTTP::Cookies; $cook->load( '<& ' . fileno(*Read) ); # $cook is now the same as $cookies above and we can use it as if it w +as print $cook->as_string;
    What I did here was use a standard funtion that creates two connected filehandles. Then sent the data to the part called Write, then closed it to flush it and signal EOF. Then in a new HTTP::Cookies object we load the data by telling it to open its filehandle to the same file descriptor as the other end of our connected handles.

    On the whole this solution seems to do the job requested without requiring disk I/O, but using simple disk I/O may be a clearer method and seems to be necessary under Win98 for $cookie->as_string data over 512 characters long.

Re: LWP Cookies
by MeowChow (Vicar) on Feb 12, 2001 at 13:33 UTC
    Well, as long as we're suggesting solutions that are the antithesis of maintainability and interface abstraction {grin}, you may also want to try FreezeThaw or Storable on your cookie objects. From a cursory glance at the code of the HTTP::Cookies module, I gather that this should work, though I've not actually attempted to do so.

    In a perfect world, a from_string method would be implemented alongside the as_string method of HTTP::Cookies. Hint hint... :)

       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print