あなたの例を使用して、私はこのテストを作成しました:
<?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();
?>
最初のロードで、以下を出力します。
Array
(
)
Array
(
)
リロード時:
Array
(
[id] => 0001
[alias] => name
)
Array
(
[id] => 0001
[alias] => name
)
2回目のリロード時:
Array
(
)
Array
(
)
したがって、コードがラウンドトリップでCookieをリセットしているようです。
編集
以下:
<?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();
?>
どちらかが印刷されます:
Array
(
)
Array
(
)
または印刷します:
Array
(
[id] => 0001
[alias] => name
)
Array
(
)
http://jfcoder.com/test/cookies.php(リロードを数回押します)
クッキーを忘れるようにブラウザに指示する必要がある場合はsetcookie()
、時間を遡って使用してください(私は少なくとも24時間を使用します)。$_COOKIES
配列で値を忘れる必要がある場合は、を使用しますunset()
。
編集
ここで発生する可能性のある問題は2つあります。1つはCookieのサブドメインの不一致、もう1つはパスのアクセシビリティの問題です。
例えば...
訪問者がアクセスしたURLが、CookieをリセットしようとするURLとは異なるディレクトリにある場合は、他のパスからCookieにアクセス(およびリセット)できるパスをCookieに設定する必要があります。
setcookie('my', 'cookie', time()+3600, '/');
または、サブディレクトリ内に含まれるパスを許可するには...
setcookie('my', 'cookie', time()+3600, '/my/path/');
訪問者がアクセスしたURLがサブドメイン(wwwを含む)であるが、すべてのサブドメインがCookieにアクセスできるようにする場合は、setcookieにワイルドカードを指定する必要があります。
setcookie('my', 'cookie', time()+3600, '/', '.example.com');
www.example.com、my.example.com、およびsub.example.comからのURLがCookieにアクセスしてリセットできるようにします。明らかに、この時点でもパスの考慮事項を考慮する必要があります。サブドメイン引数の場合、パスを含める必要があるためです。/
URL上のすべてのサブディレクトリを選択し.
、ドメインがサブドメインを選択する前に(サブドメインですが、よくわかりません)。
http://php.net/manual/en/function.setcookie.php