печенье не сбрасывается - PullRequest
0 голосов
/ 30 марта 2011

Я не могу получить 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']);    //    "            "

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Как насчет установки времени на час назад, а не на это большое число?

setcookie("alias", "", time()-3600);
1 голос
/ 30 марта 2011

Используя ваш пример, я создал этот тест:

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

При второй перезагрузке:

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().

РЕДАКТИРОВАТЬ

Здесь есть две возможные проблемы, одна из которых связана с несовпадением субдомена.файл cookie и проблема доступности пути.

Например ...

Если URL-адрес, к которому обращался посетитель, находился в каталоге, отличном от того, где URL-адрес, который пытается сбросить файл cookie, необходимустановить 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');

Разрешит URLс www.example.com, my.example.com и sub.example.com для доступа и сброса cookie.Очевидно, что и в этот момент необходимо учитывать ваши пути к путям, поскольку для аргумента субдомена вам нужно будет включить путь./ выбирает все подкаталоги в URL и . до того, как домен выбирает субдомены (хотя sub.sub.domains, я не уверен).

http://php.net/manual/en/function.setcookie.php

...