php删除cookie反倒被赋值为deleted 解决办法
php删除cookie反倒被赋值为deleted 解决办法原因是:
如果遇到用户客户端的电脑本地时间 比当前服务器时间少1年以上,IE浏览器就会出现这种情况。这种情况会致使用户永远点击退出退出不了。因为username被赋值为deleted。
http://blog.运维网.com/attachment/201305/152559627.jpg
以下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,当然这些手册中并没有。
解决办法:
方法一:修改用户客户端时间跟服务器时间一样。(即同步到标准的北京时间即可)。
方法二:页面给个“请修改本地时间”的提示。(用js获取本地时间和php获取服务器时间对比下,如果间隔一年以上就提示)
页:
[1]