php 删除cookie方法大全

发布时间:2020-05-12编辑:脚本学堂
php 删除cookie的方法,在php中setcookie方法可以设置cookie,也可以藉此方法删除cookie,实例学习php 删除cookie信息的方法,一起来了解下。

由于php未提供删除cookie的函数与方法,删除cookie需要借助setcookie()方法来实现,虽然此方法是用来设置cookie信息的。

本节 jbxue小编就带大家一起学习下php 删除cookie信息的多种方法与实例代码。

setcookie() 删除:
// 将过期时间设为一小时前
1、

setcookie("TestCookie", "", time() - 3600);
 

php删除cookie,即把整个cookie的有效期设置为当前时间以前。

2、

setcookie("testcookie", '');或setcookie("cookiename", false);print_r($_COOKIE);
 

整个$_cookie数组置为空,而非仅仅$_cookie['testcookie']为空

为验证正确与否,可以用winsock抓包,观察返回的http头,发现http头是Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT。
即说明setcookie("testcookie", '');
确实是将testcookie这个cookie直接删除

setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器的变量。

cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。cookie 的名称指定为相同名称的变量。

例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。
必须在任何其他输出发送前对 cookie 进行赋值。
如果成功,则该函数返回 true,否则返回 false。

语法
 

setcookie(name,value,expire,path,domain,secure)参数描述name必需。规定 cookie 的名称。
value必需。规定 cookie 的值。
expire可选。规定 cookie 的有效期。
path可选。规定 cookie 的服务器路径。
domain可选。规定 cookie 的域名
secure可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

提示和注释
注释:可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。

php手册中php 删除cookie的说明是怎么样的?

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

如何删除刚才设置的 cookie:
setcookie() 删除
 

// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);

以下PHP删除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);
会发送php删除cookie的http头给浏览器.最后我们可以得出结论,在php中使用setcookie($cookiename, '');或者 setcookie($cookiename, null);
皆可实现php删除cookie。

以下举一些php 删除cookie的小例子,使用setcookie()函数来设置浏览器的Cookie信息。

常见设置cookie信息的方法:
 

复制代码 代码示例:

<?php
$name = 'mycookie'; // cookie名称
$value = 'CodePlayer'; // cookie值
$expire = time() + 3600 * 24 * 7; // 过期时间 7天
$path = '/'; // 设置可以使用该cookie的路径,'/'表示站点根目录,该目录及所有子目录中均可访问该cookie。

// 设置一个cookie
setcookie( $name, $value, $expire, $path );
?>

php 删除cookie信息,可以直接使用setcookie()函数来删除Cookie信息,只需要将过期时间更改为当前时间之间的时间即可。

例子:
 

复制代码 代码示例:

<?php
// 设置cookie已过期,浏览器即可删除该cookie。此时可以为任意值。
setcookie( 'mycookie', 'CodePlayer', time() - 3600, '/' );

// 或者

// 将过期时间直接设为0,表示1970-1-1(已经过期了),可以避免time()及数学运算的消耗
setcookie( 'mycookie', 'CodePlayer', 0, '/' );
?>

此外,还可以将Cookie的值设为空字符串("")或null,也可用来删除Cookie。
 

复制代码 代码示例:

<?php
/* 删除cookie */

setcookie('mycookie', '');
// 或者
setcookie('mycookie', null);
?>
 

如果直接如上使用空字符串或null的方式来删除Cookie,可能会导致对应的cookie无法删除。

当然,上述删除Cookie的方式是没有错的,错误在于没有在删除Cookie时指定路径(第4个参数)。
如果没有指定路径参数,则路径默认为当前请求URL所在目录。
如果设置Cookie时的路径与删除Cookie时的路径不一致,将无法删除该Cookie。

例子:
 

复制代码 代码示例:

<?php
// 当前请求为:"/abc/cookie.php"

// 在路径"/"下设置cookie
setcookie( 'mycookie', 'CodePlayer', time() + 3600 * 24 * 7, '/' );

// 注意:这样删除是无效的,因为默认路径为当前目录,即:"/abc/"
// setcookie( 'mycookie', '');

// 删除路径"/"下设置的名为"mycookie"的cookie,此时时间值可随意,哪怕未过期也行
setcookie( 'mycookie', '', 0, '/');
?>