php新手请教一个关于cookie的问题
代码如下:
<code>function cookie($name) { return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null; } /** * 从客户端浏览器删除一个 Cookie。 * @param string $cookie_name 要删除的 Cookie 名称。 * @return void */ function delete_cookie($cookie_name) { setcookie($cookie_name, '', time() - 2 * 24 * 3600); unset($_COOKIE[$cookie_name]); } delete_cookie('mycookie'); setcookie('mycookie', 'myvalue'); var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>
为何总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
回复内容:
代码如下:
<code>function cookie($name) { return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null; } /** * 从客户端浏览器删除一个 Cookie。 * @param string $cookie_name 要删除的 Cookie 名称。 * @return void */ function delete_cookie($cookie_name) { setcookie($cookie_name, '', time() - 2 * 24 * 3600); unset($_COOKIE[$cookie_name]); } delete_cookie('mycookie'); setcookie('mycookie', 'myvalue'); var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>
为何总是输出NULL?为什么不是输出刚刚设置的'myvalue'?
COOKIE 是你从你的客户端带过去的,所以读到COOKIE应该是上次脚本设置的,然而你每次执行这个脚本时, 都把上次设置的COOKIE删了,然后设置了一个新COOKIE,这个COOKIE只能被下次运行的脚本读取到。然后一直进行 删-设-删-设 的循环。。。所以读不到咯。
如果把COOKIE改为SESSION的话,就能读到了,SESSION不会像COOKIE这样慢一拍的。它是保存在服务器的。
因为对于COOKIE的赋值只有等下一次浏览请求时才能生效。但你等到下一次浏览的时候你delete掉了,所以就一直,这个COOKIE和你多大仇..
你在本次请求中已经删除了$_COOKIE['mycookie'],而setcookie需要下一次请求才生效.
$_COOKIE是浏览器把cookie信息传给PHP.
setcookie是PHP把cookie信息告诉浏览器.
也就是$_COOKIE['xxx']的生成需要setcookie('xxx')所在的请求先执行完成.
如果你想输出‘myvalue’,可以将unset($_COOKIE[$cookie_name]);
注释掉。就可以输出了
unset 会立即生效,但是 set_cookie 需要下一次请求才会有效果。
同理,如果删除了 unset 这一句,输出的结果并不是刚刚 set_cookie 的,而是上一次 set_cookie 的。
例如,我把 unset 这一句删除,然后刷新,会显示 string(7) "myvalue"
,没有问题;
接着我把 myvalue 改成 myvalue2,然后刷新,还是显示 string(7) "myvalue"
;
再刷新一次,才会显示 string(8) "myvalue2"
。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

登录 CakePHP 是一项非常简单的任务。您只需使用一项功能即可。您可以记录任何后台进程(如 cronjob)的错误、异常、用户活动、用户采取的操作。在 CakePHP 中记录数据很容易。提供了 log() 函数

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 是一个开源MVC 框架。它使开发、部署和维护应用程序变得更加容易。 CakePHP 有许多库可以减少大多数常见任务的过载。
