删除cookie的问题,不会被取消

Rem*_*miX 23 php cookies unset

我已经尝试在php手册和互联网上搜索如何删除cookie,我尝试过的方式完全相同:

setcookie("name", '', 1);
Run Code Online (Sandbox Code Playgroud)

要么

setcookie("name", '', time()-3600);
Run Code Online (Sandbox Code Playgroud)

但是当我在Firefox中检查cookie对话框中的cookie时,它仍然具有相同的值.我使用以下行设置此cookie:

setcookie("name", $value, time() + 259200, $path);
Run Code Online (Sandbox Code Playgroud)

我在stackoverflow上发现了这个问题:但是没有一个答案解决了这个问题.我也试过把所有的参数都放进去,就像作者说的那样,但它没有效果.

有谁看到这个问题?

Pau*_*sma 55

手册说明:

必须使用与设置相同的参数删除Cookie.如果value参数为空字符串,或者FALSE所有其他参数与先前对setcookie的调用匹配,则将从远程客户端删除具有指定名称的cookie.这是通过将值设置为"已删除"并将到期时间设置为过去一年来实现的.

因此,请确保$path正确指定 - 也可以在删除时指定.例如,如果在子目录中指定了cookie,则可能无法从父目录或子目录(或两者)中删除它.

我不完全确定权限如何工作,但您可能希望使用Web Developer Toolbar查看您尝试删除的cookie 的路径.


Rem*_*miX 10

好吧,我真的不明白,但它现在有效.神奇的代码是:

setcookie("name", '', 1, $path);
Run Code Online (Sandbox Code Playgroud)

我没有尝试过那个??!无论如何,它现在有效.感谢您的帮助,人们!


bfu*_*zze 6

我很惊讶没有人提到它(或者我错过了它),但是域名也很重要!如果您位于sub-domain.example.com上,并且cookie来自.example.com,则需要显式设置domain参数,否则它将假定当前域,并且将无法使用。

setcookie('cookiename', FALSE, -1, '/', '.example.com');
Run Code Online (Sandbox Code Playgroud)

子域的值不会清除父域中的Cookie。


Rus*_*lan 5

如果您删除特定路径的 cookie 并且您的路径参数以尾部斜杠“/”结尾,那么它将在 Firefox 和 IE 中工作,但在 Chrome 和 Opera 中不起作用。如果没有尾部斜杠,那么它只能在 Chrome 和 Opera 中工作。

所以你应该同时使用两者:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE
Run Code Online (Sandbox Code Playgroud)