cookie是一个存储在用户本地的一个小的文本文件了我们可以通过浏览器来访问它,下面我们来看看关于php 删除cookie的一些事项。
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制
在php中,我们可以使用setcookie()函数来设置浏览器的cookie信息。
常见的设置cookie的示例代码如下:
不过,我们想要删除cookie信息的话,又该怎么办呢。php并没有提供另外一个专门用来删除cookie的函数,而是直接使用setcookie()函数来删除cookie信息,我们只需要将过期时间更改为当前时间之间的时间即可。
此外,我们还可以将cookie的值设为空字符串(“”)或null,也可用来删除cookie。
这样就完了吗?no!如果你直接如上使用空字符串或null的方式来删除cookie,可能会导致对应的cookie无法删除。
当然,上述删除cookie的方式是没有错的,错的是我们没有在删除cookie时指定路径(第4个参数)。如果没有指定路径参数,则路径默认为当前请求url所在目录。如果你设置cookie时的路径与删除cookie时的路径不一致,将无法删除该cookie。
以下代码可以在php5.20的linux源码包中ext/standard/head.c第99行附近找到.
if (value && value_len == 0) {
/*
* msie doesn't delete a cookie when you set it to a null value
* so in order to force cookies to be deleted, even on msie, we
* pick an expiry date 1 year and 1 second in the past
*/
time_t t = time(null) - 31536001;
dt = php_format_date(d, d-m-y h:i:s t, sizeof(d, d-m-y h:i:s t)-1, t, 0 tsrmls_cc);
sprintf(cookie, set-cookie: %s=deleted; expires=%s, name, dt);
efree(dt);
} else {
sprintf(cookie, set-cookie: %s=%s, name, value ? encoded_value : );
if (expires > 0) {
strcat(cookie, ; expires=);
dt = php_format_date(d, d-m-y h:i:s t, sizeof(d, d-m-y h:i:s t)-1, expires, 0 tsrmls_cc);
strcat(cookie, dt);
efree(dt);
}
}
源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0
时
sprintf(cookie, set-cookie: %s=deleted; expires=%s, name, dt);
会发送删除cookie的http头给浏览器.
最后我们可以得出结论,在php中使用
setcookie($cookiename, '');或者 setcookie($cookiename, null);
都会删除cookie,当然这些手册中并没有。