# perldoc > HTTP::Cookies

---
type: CommandReference
command: HTTP::Cookies
mode: perldoc
section:
source: perldoc
---

## Quick Reference
- `HTTP::Cookies->new(file => "cookies.dat", autosave => 1)` — create a persistent cookie jar
- `$ua->cookie_jar($cookie_jar)` — attach jar to an LWP::UserAgent
- `$cookie_jar->extract_cookies($response)` — read Set-Cookie/Set-Cookie2 headers from a response
- `$cookie_jar->add_cookie_header($request)` — add Cookie header to an outgoing request
- `$cookie_jar->save` — persist current cookies to the file given at construction
- `$cookie_jar->load($file)` — restore cookies from a previously saved file
- `$cookie_jar->clear` — remove all cookies from the jar
- `$cookie_jar->scan(sub { ... })` — iterate over every stored cookie

## Name
HTTP cookie jars

## Synopsis
perl
use HTTP::Cookies;
$cookie_jar = HTTP::Cookies->new(
  file     => "$ENV{'HOME'}/lwp_cookies.dat",
  autosave => 1,
);

use LWP;
my $browser = LWP::UserAgent->new;
$browser->cookie_jar($cookie_jar);

# Empty, temporary jar:
$browser->cookie_jar( {} );
## Options

### Constructor Parameters
- `file` — file for save/restore (default: none)
- `autosave` — save automatically on destruction (bool)
- `ignore_discard` — save cookies marked for discard (bool)
- `hide_cookie2` — suppress Cookie2 header in requests (bool)

### Methods
- `get_cookies($url_or_domain, @keys)` — returns a hash of cookies valid for the given URL; if `@keys` provided, returns those values (or `undef`)
- `add_cookie_header($request)` — sets the `Cookie` header on an `HTTP::Request` object
- `extract_cookies($response)` — processes `Set-Cookie` and `Set-Cookie2` headers from an `HTTP::Response` and updates the jar
- `set_cookie($version, $key, $val, $path, $domain, $port, $path_spec, $secure, $maxage, $discard, \%rest)` — manually insert/update a cookie; `$maxage <= 0` deletes it
- `save($file?, %opts)` — save cookies to file (Set-Cookie3 format); `ignore_discard` option overrides attribute
- `load($file?)` — load cookies from a file written by `save()`
- `revert` — empty the jar and reload from the last save file
- `clear($domain?, $path?, $key?)` — remove all cookies, or those matching domain/path/key
- `clear_temporary_cookies` — discard cookies with no expire or a true `discard` flag
- `scan(\&callback)` — invoke the callback for each cookie; arguments: `(version, key, val, path, domain, port, path_spec, secure, expires, discard, hash)`
- `as_string($skip_discardables?)` — return jar state as a string of `Set-Cookie3` lines

## Examples

perl
# Create a jar and let LWP use it
my $jar = HTTP::Cookies->new(
  file     => "cookies.lwp",
  autosave => 1,
);
my $ua = LWP::UserAgent->new;
$ua->cookie_jar($jar);

# Manually extract cookies from a response
my $response = $ua->get("https://example.com");
$jar->extract_cookies($response);

# Add Cookie header before sending a request
my $req = HTTP::Request->new(GET => "https://example.com/secure");
$jar->add_cookie_header($req);
$response = $ua->request($req);

# Iterate over all cookies
$jar->scan(sub {
  my ($version, $key, $val, $path, $domain, $port,
      $path_spec, $secure, $expires, $discard, $hash) = @_;
  print "$domain/$path: $key=$val\n";
});
## See Also
- [HTTP::Cookies::Netscape](https://www.chedong.com/phpMan.php/perldoc/HTTP%3A%3ACookies%3A%3ANetscape/markdown)
- [HTTP::Cookies::Microsoft](https://www.chedong.com/phpMan.php/perldoc/HTTP%3A%3ACookies%3A%3AMicrosoft/markdown)