php删除cookie反倒被赋值为deleted 解决办法

简介:

php删除cookie反倒被赋值为deleted 解决办法

原因是:

如果遇到用户客户端的电脑本地时间 比当前服务器时间少1年以上,IE浏览器就会出现这种情况。这种情况会致使用户永远点击退出退出不了。因为username被赋值为deleted。


以下PHP删除Cookie代码可以在PHP5.20的linux源码包中ext/standard/head.c第99行附近找到。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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获取服务器时间对比下,如果间隔一年以上就提示)








      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1211270,如需转载请自行联系原作者

相关文章
|
6月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
43 0
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
1月前
|
缓存 PHP C语言
宝塔PHP8.1安装fileinfo拓展失败解决办法
在宝塔面板安装PHP8.1后,fileinfo扩展安装失败,手动尝试也报错。通过分析错误信息,在Makefile中修改CFLAGS添加`-std=c99`,并执行`make clean`清除缓存后,重新编译安装成功。最后在php.ini中启用fileinfo扩展并重启PHP服务。注意需调整CFLAGS为`-std=c99 -g`,去掉`-O2`。
86 0
|
5月前
|
存储 安全 关系型数据库
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
|
6月前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
77 2
|
6月前
|
PHP
php curl获取cookie
php curl获取cookie
44 0
|
6月前
|
存储 安全 PHP
php案例 解决cookie失效后使用session的问题
php案例 解决cookie失效后使用session的问题
php案例 解决cookie失效后使用session的问题