I am unable to get the cookie to unset.
cookie set: (id, alias)
setcookie("id",$data['id'], time()+3600*24*30);
setcookie("alias",$this->nombre, time()+3600*24*30);
cookies unset? (id, alias)
setcookie("id","-1",time()-315360000);
setcookie("alias","",time()-315360000);
unset($_COOKIE['id']); // additional, but still no..
unset($_COOKIE['alias']); // " "
What I am doing wrong?
Using your example, I created this test:
<?php
ob_start();
echo '<pre>';
setcookie("id","0001", time()+3600*24*30);
setcookie("alias","name", time()+3600*24*30);
print_r($_COOKIE);
if ($_COOKIE['id'] || $_COOKIE['alias']) {
setcookie("id","-1",time()-315360000);
setcookie("alias","",time()-315360000);
}
print_r($_COOKIE);
ob_end_flush();
?>
On the first load, it outputs:
Array
(
)
Array
(
)
On reload:
Array
(
[id] => 0001
[alias] => name
)
Array
(
[id] => 0001
[alias] => name
)
On second reload:
Array
(
)
Array
(
)
So it appears your code is resetting the cookie on the roundtrip.
EDIT
The following:
<?php
ob_start();
echo '<pre>';
setcookie("id","0001", time()+3600*24*30);
setcookie("alias","name", time()+3600*24*30);
print_r($_COOKIE);
if ($_COOKIE['id'] || $_COOKIE['alias']) {
setcookie("id","-1",time()-315360000);
setcookie("alias","",time()-315360000);
unset($_COOKIE['id']);
unset($_COOKIE['alias']);
}
print_r($_COOKIE);
ob_end_flush();
?>
Will either print:
Array
(
)
Array
(
)
Or will print:
Array
(
[id] => 0001
[alias] => name
)
Array
(
)
http://jfcoder.com/test/cookies.php (hit reload a few times)
If you need to tell the browser to forget the cookie, use setcookie()
with the time set back in time (I use at least 24 hours). If you need the $_COOKIES
array to forget the value, use unset()
.
EDIT
There are two possible issues contributing here, one a subdomain mismatch on the cookie, and a path accessibility problem.
For instance...
If the url the visitor accessed was on a directory different from where the url that attempts to reset the cookie, you need to set the cookie with a path that will allow that cookie to be accessed (and reset) by other paths.
setcookie('my', 'cookie', time()+3600, '/');
Or to allow for paths contained within a subdirectory...
setcookie('my', 'cookie', time()+3600, '/my/path/');
If the url the visitor accessed was a subdomain (including www), but you want the cookie to be accessible to all subdomains, you need to give a wildcard to setcookie.
setcookie('my', 'cookie', time()+3600, '/', '.example.com');
Will allow urls from www.example.com, my.example.com, and sub.example.com to access and reset the cookie. Obviously, at this point too your path considerations need to be taken into account, since for a subdomain argument, you will need to include a path. /
selects all subdirectories on the url, and .
before the domain selects subdomains (although sub.sub.domains, I'm not sure).
http://php.net/manual/en/function.setcookie.php
How about setting the time to an hour back, rather than that large number?
setcookie("alias", "", time()-3600);