NAME

cookies.pm - an object class interface to HTTP cookies.


SYNOPSIS

    use EWS::cookies;

     ### Public Methods ###

       $cookies = new EWS::cookies(-io => $baseIO);

       %cookieHash    = $cookies->cookies($cookie_name);
       $cookieRef     = $cookies->cookiesref($cookie_name);

       $expiration    = $cookies->expirationDate(7 * 24 * 60); # 7 days from now.

       $cookie_value  = $cookies->find($cookie_name);

       @cookie_names  = $cookies->names;

       %cookie_hash   = $cookies->read;
       $cookie_ref    = $cookies->readref;

       $cookies->reset($name);

       $secure        = $cookies->secure($name);
       $newSecure     = $cookies->secure($name, 1);

       $cookies->send;
       $cookies->sendall;
       $cookies->sendheader;
       $cookies->sendmodified;

       $cookies->set($name, {-value   => 'Value',
                             -domain  => $domain,
                             -expires => 7 * 24 * 60 * 60, # 7 days
                             -path    => '/'} );

     ### Private Methods ###

       $cookies->_setItem;

     ### Attributes ###

       $domain        = $cookies->domain($name);
       $newDomain     = $cookies->domain($name, $cookieDomain);

       $expires       = $cookies->expires($name);
       $newExpiration = $cookies->expires($name, $expirationDate);

       if ($cookies->isCookie($name))
       {
         ...
       }

       $modified      = $cookies->modified($name);
       $newModified   = $cookies->modified($name, 1);
           
       $path          = $cookies->path($name);
       $newPath       = $cookies->path($name, '/');

       $revision      = $cookies->Revision;

       $secure        = $cookies->secure($name);
       $newSecure     = $cookies->secure($name, 1);

       $cookie_exists = $cookies->valid;

       $value         = $cookies->value($cookie_name);
       $newValue      = $cookies->value($cookie_name, $value);

       $version       = $cookies->Version;


DESCRIPTION

EWS::cookies is an object class interface to HTTP cookies. EWS::cookies creates a wrapper around the methods and attributes used to manipulate HTTP cookies.

EWS::cookies can be sub-classed and supports full inheritance. It may be used as a base-class for a new class object specific to an application.

A single hash structure (hash of hashes) is maintained by EWS::cookies. It is used to hold the values of the current HTTP Cookie and to construct a cookie for output to the http user-agent using the EWS::baseIO object class. Attribute methods are provided to access and modify each field of each cookie within this complex structure.


PUBLIC METHODS


new

The new method creates a new object class used to manipulate a cookie item:

      $cookie = EWS::cookies->new(-io     => EWS::baseIO object,
                                  -debug  => 1 to debug,
                                  -path   => RFC2109 path,
                                  -expire => expiration time, in seconds);

      or

      $cookie = new EWS::cookies(-io     => EWS::baseIO object,
                                 -debug  => 1 to debug,
                                 -path   => RFC2109 path,
                                 -expire => expiration time, in seconds);

    Enter:
      %params = parameter hash (see below).
    Exit:
      $self = blessed class object.

    %params contain hash values as follows:
      -expire => default expiration date, in seconds (default = 1 year).
      -path   => RFC2109 path (default = "/")
      -io     => baseIO object (default = internally generated baseIO object).
      -debug  => 1 to debug (default = 0)


cookies

Fetch all cookie values from class structure:

      %cookies = $cookies->cookies;

    Enter:
      none.
    Exit:
      %cookies = hash of cookies
      undef if not found


cookiesref

Fetch reference to cookie hash:

      %cookies = $cookies->cookiesref;

    Enter:
      none.
    Exit:
      \%cookies = reference to hash of cookies
      undef if not found


expirationDate

The expirationDate method sets the expiration time of the cookie as an offset from the current time:

      $cookie->expirationDate($Offset);

To set a cookie as expired, pass -1 to the routine, and the time will be set backwards, causing the cookie to expire.

    Enter:  
      $delta = # seconds until expiration
    Exit:
      $expiration = expiration date string in RFC2109 format.


find

The find method expects the name of the Cookie to find:

      $value = $cookie->find($name);

If the requested name is found, its associated value is returned. If the requested name is NOT found, undef is returned.

    Enter:
      $name = name of cookie to locate.
    Exit:
      $value = value of cookie.
      undef if $name does not exist.


names

The GetCookieNames method returns the cookie names:

      @names = $cookie->names;

    Enter:
      none.
    Exit:
      array containing cookie names (array reference in scalar mode)
      undef if cookies not defined.


read

The read method reads the current cookie values and returns them in a hash:

      %cookieHash = $cookies->read;

The hash returned contains the cookie names as the key and the cookie values as the associated data.

    Enter:
      none.
    Exit:
      %cookieHash = hash containing cookies read.
      undef if no cookies to load.


readref

The readref method reads the current cookie values into an internal hash and returns a reference pointer to the hash:

      $cookieRef = $cookies->readref;

The referenced hash contains the cookie names as the key and the cookie values as the associated data.

    Enter:
      none.
    Exit:
      $cookies = reference to hash containing cookies read.
      undef if no cookies to load.


reset

The reset method resets cookie parameters:

      $cookie->reset;

    Enter:
      $name = name of cookie to reset.
    Exit:
      none.


send

The send method sends the cookie parameters set in the set method to the user-agent:

      $cookie->send;

Note: After the last cookie has been sent, an HTML header must be sent to the browser to activate the cookie. See sendHtmlHeader.

    Enter:
      $name = name of cookie to send.
    Exit:
      1 if $name exists and has been sent.
      undef if $name does not exist.


sendall

Send the values in all cookie hashes to the requesting browser.

    Enter:
      none.
    Exit:
      none.


sendheader

The sendheader method sends an HTML header to the browser. This header should be sent AFTER the LAST cookie has been sent to the browser, and contains the following information:

      Content-type: text/html

      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
      <html>
        <head>
          <meta http-equiv="Content-Type" 
                content="text/html; charset=iso-8859-1">
          <meta name="GENERATOR" content="myprog">

where myprog is the name of the perl script containing the EWS::cookies module.

This method is included for completness only.

    Enter:
      none.
    Exit:
      none.


sendmodified

Send the values in cookie hashes containing modified=1 to the user-agent.

    Enter:
      none.
    Exit:
      none.

    Calls B<send> for each cookie name that has modified > 0.


set

The set method allows setting of any (or all) of the parameters of a cookie:

      $cookie->set(-cookie_field=>cookie_value, ...);

Parameters may be of the form:

      Set Cookie Name:     -name    => Cookie Name (required)
      Set Cookie Value:    -value   => Value
      Cookie Path:         -path    => Path
      Domain:              -domain  => Domain
      Expiration date:     -expires => Date
      Secure:              -secure  => value

Any, or all, of the parameters may be set in a single call. Multiple calls can be used to set individual parameters.

Note: This method does NOT send the cookie. It merely sets cookie parameter(s).

    Enter:
      %params = parameter hash (see above).
    Exit:
      none.


ATTRIBUTES


domain

The domain method expects the name of the cookie to evaluate and an optional domain to set:

      $domain = $cookie->domain($name);

      or

      $newDomain = $cookie->domain($name, $domain);

    Enter:
      $name = cookie name
      $domain = domain value.
    Exit:
      $domain = current domain
      undef if not found.


expires

The expires method expects the name of the cookie to evaluate and an optional expires to set:

      $expires = $cookie->expires($name);

      or

      $newExpires = $cookie->expires($name, $expires);

    Enter:
      $name = cookie name
      $expires = expires value.
    Exit:
      $expires = current expires
      undef if not found.


isCookie

Check for existence of a cookie with $name.

    Enter:
      $name = cookie name to check for
    Exit:
      1 if exists
      undef if doesn't exist


modified

The modified method expects the name of the cookie to evaluate and an optional modified to set:

      $modified = $cookie->modified($name);

      or

      $newModified = $cookie->modified($name, $modified);

    Enter:
      $name = cookie name
      $modified = modified value.
    Exit:
      $modified = current modified
      undef if not found.


path

The path method expects the name of the cookie to evaluate and an optional path to set:

      $path = $cookie->path($name);

      or

      $newPath = $cookie->path($name, $path);

    Enter:
      $name = cookie name
      $path = path value.
    Exit:
      $path = current path
      undef if not found.


Revision

The Revision method returns the revision number of cookies.pm:

      $cookie_revision = $cookie->Revision;

    Enter:
      none.
    Exit:
      current revision string.


secure

The secure method expects the name of the cookie to evaluate and an optional secure to set:

      $secure = $cookie->secure($name);

      or

      $newSecure = $cookie->secure($name, $secure);

    Enter:
      $name = cookie name
      $secure = secure value.
    Exit:
      $secure = current secure
      undef if not found.


valid

The valid method returns defined if a cookie exists, and undef if no cookies are found.

    Enter:
      none.
    Exit:
      1 if cookies have been returned by the user-agent.
      0 if no cookies


value

The value method expects the name of the cookie to evaluate:

      $value = $cookie->value($name);

    Enter:
      $name = cookie name
    Exit:
      value of cookie.
      undef if not found.


Version

The Version method returns the version number of cookies.pm:

      $cookie_version = $cookie->Version;

    Enter:
      none.
    Exit:
      current version string.


PRIVATE METHODS


_setItem

Local subroutine to set the value of a new cookie item, if a match to a built-in key is found.

For cookie $name, set $field to $value if $key eq $param

    NOTE: This routine IGNORES errors!
          (i.e. - the assumption is that you know what you are doing!)

    Enter:
      $name = cookie name (e.g. -name)
      $key = cookie field name to match
      $param = parameter name of field being set
      $field = cookie field name
      $value = field value to set
    Exit:
      1 if added
      0 if not added.


AVAILABILITY


IMPLEMENTATION

This module assumes that the target platform (web server) supports the HTTP_COOKIE environment variable ($ENV{'HTTP_COOKIE'}).

This implementation was developed on a FreeBSD 4.3 Unix server running the Apache Server and perl 5.005. It has been tested on Microsoft Windows200 and WindowsNT 4.0 platform running the Microsoft Internet Information Server (IIS3/IIS4) and ActivePerl. It is currently in use on several Linux servers of various vintages.

This implementation conforms to RFC2109, HTTP State Management Mechanism, available at http://www.faqs.org/rfcs/rfc2109.html


MORE INFORMATION

RFC2109, HTTP State Management Mechanism, is available at http://www.faqs.org/rfcs/rfc2109.html

For more information on using cookies, the technical specification, or other samples/examples of cookie implementations in perl5 as well as C++, Java, JavaScript, etc., refer to the very well informative site Cookie Central at http://www.cookiecentral.com .

There is a VERY good FAQ written by David Whalen at http://www.cookiecentral.com/faq/ .


AUTHORS

Jay Wheeler (jaywheeler@geocities.com), EarthWalk Software.


COPYRIGHT

EWS::cookies is copyright © 1999, 2002. EarthWalk Software.

This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This module is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this script; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA, or from the Free Software Foundation web page at http://www.fsf.org/licenses/lgpl.txt