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