Raymond Wan wrote:
> I was wondering if it was possible to delete cookies. I read that
> using Javascript, cookies can be deleted by setting it to a time in
> the past. I'm not sure how to do it in Mason, though. I think I know
> how to get a cookie and also to set a new one and send it out. But, I
> don't know how to get an old cookie, change it, and send it back. Or
> even, get a cookie, *copy it*, send the copy back. What is stopping
> the browser from creating a second cookie with the same name?

Cookie names are unique to a given domain (the domain which can
optionally be explicitly set using $cookie->domain ) - if you write
another cookie with the same name and domain and path it'll overwrite
the previous one.

> $r->err_headers_out->add ("Set-Cookie" => $cookie->as_string);


Fine, that's basically what the bake() method does. I made a subclass
of APR::Request::Cookie which included some hacks - try these:

Deleting:
$val=$cookie->as_string;
$val=~s/max-age=(\S*?)(\s*?//ig; # remove any existing max-age
$val.='; Max-Age=0';
$r->err_headers_out->add("Set-Cookie", $val);

Setting:
$val=~s/="\/"/=\//; # firefox hack to ensure it understands the path
$r->err_headers_out->add("Set-Cookie", $val);


hth,
John