视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php cookie如何清除
2020-11-27 13:59:33 责编:小采
文档


推荐:《PHP视频教程》

  • 本方法适用于任何品牌的电脑。

  • PHP清除COOKIE,PHP无法删除COOKIE?

    设置COOKIE有效期、COOKIE过期

    PHP手册中提到:

    PHP 透明地支持 HTTP cookie。cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。可以用 setcookie() 或 setrawcookie() 函数来设置 cookie。cookie 是 HTTP 标头的一部分,因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的类似。

    setcookie():
    bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )

    要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

    删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这也是几乎所有php程序员都会这么做。

    例如:

    setcookie('test','true',time()+3600); //创建cookie
    setcookie('test','',time()-3600); //清除建立的cookie

    ==================================================================================

    如果直接setcookie("test", '');

    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直接删除.而关于这种情况在php手册中完全没有说明.

    最后阅读php源码,终于发现(这就是开源的好处了,有什么不清楚的内幕直接查源码)

    以下代码可以在php5.20的linux源码包中ext/standard/head.c第99行附近找到.

    if (value && value_len == 0) {
    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,当然这些手册中并没有。

    =====================================================================================

    php cookie 无法删除/清除过期?

    今天利用 Cookie 做网站的用户登录,经过调试,用

     setcookie("username", "username", time()+1000,"/php100/");

    等储存用户的登录信息,然后利用

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

    做 退出,在IE下测试没有任何问题。既然做网站,就要兼容尽可能多的浏览器,呵呵。于是在 Firefox 中测试,登陆一切正常,当 推出时,遇到了麻烦。怎么也不会退出,用户总是在登录状态。于是查看了 IE、Firefox 中cookie记录的区别,经过测试,才恍然大悟。

    原来如果没有指定 setcookie() 的第四个参数(合法路径参数),默认会把当前目录作为合法路径,而我测试的路径为:http://127.0.0.1/php/rss2fla/data /log.php ,所以导致登陆和退出时 所设置的 cookie 路径不同。

    IE比Firefox要人性化,呵呵,当美指定路径时,会覆盖当前 IP 下的同名Cookie变量,而FireFox比较严格了,导致又重新建了个变量……

    下载本文
    显示全文
    专题