0

Cookie を設定解除できません。

Cookie セット: (ID、エイリアス)

setcookie("id",$data['id'], time()+3600*24*30);
setcookie("alias",$this->nombre, time()+3600*24*30);

クッキーの設定を解除しますか? (ID、エイリアス)

setcookie("id","-1",time()-315360000);
setcookie("alias","",time()-315360000);
unset($_COOKIE['id']);       // additional, but still no..
unset($_COOKIE['alias']);    //    "            "

私が間違っていることは何ですか?

4

2 に答える 2

2

それほど大きな数字ではなく、時間を 1 時間前に設定するのはどうですか?

setcookie("alias", "", time()-3600);
于 2011-03-30T00:54:27.453 に答える
1

あなたの例を使用して、私はこのテストを作成しました:

<?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

于 2011-03-30T01:11:32.800 に答える