人亦已歌 发表于 2022-11-1 17:50:38

Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制

为什么会有Cookies机制呢,或者说,为什么需要它?它的使用场景是什么?那就是:
由于在写服务端代码时,经常需要在个代码文件之间传递数据,如果通过require引入文件或get、post提交请求的方式来传值都非常麻烦,所以就有了cookies机制,它的原理如下。
1、客户端请求服务器,服务器使用setcookie或header命令设置一个键值对,通过响应头返回给客户端,客户端收到后会自动保存下来。
2、以后,客户端的每次请求都会自动在请求头里面带上这个键值对。
3、这样服务器的任意页面只要获取请求头里面的这个键值对就可以得到这个键值对。
服务器设置Cookie的方法如下:

header('name:tom');

setcookie('name','lisi');服务器获取Cookie的方法如下:
echo $_COOKIE['name'];默认状态下,关闭浏览器后,cookies自动消失,所以称为临时cookie。如需关闭浏览器后cookies不消失,需填写setcookie的第2个参数,如下:
$time=time()+3600;//有效期一小时
setcookie('name','lisi',$time);
setcookie('age',18,$time);
setcookie("sex","男",$time);当客户端请求以上代码所在的php文件时,服务器会把Cookies信息通过响应头返回给浏览器,如下:


无论如何,cookie信息都不可以在不同的浏览器中共享。
默认状态下,cookies设置好以后,服务器中只能在当前目录和子目录下获取,如果需要整站有效需设置setcookie的第四个参数为/,如下:
$time=time()+3600;//有效期一小时
setcookie('name','lisi',$time,'/');
setcookie('age',18,$time,'/');
setcookie("sex","男",$time,'/');执行后浏览器会得到如下的结果:

默认状态下,cookies设置好以后,不支持子域名共享,我们来测试一下,跨域访问的情况,如下:

如需子域名共享,需设置setcookie的第五个参数,如下:
$time=time()+3600;//有效期一小时
setcookie('name','lisi',$time,'/','php.zhao');
setcookie('age',18,$time,'/','php.zhao');
setcookie("sex","男",$time,'/','php.zhao');

设置后再进行跨域访问,已可以访问,如下:



默认状态下,不开启安全访问,如需仅https访问需设置第6个参数为true,设置后http将不能访问。设置代码如下:
$time=time()+3600;//有效期一小时
setcookie('name','lisi',$time,'/','php.zhao',true);
setcookie('age',18,$time,'/','php.zhao');
setcookie("sex","男",$time,'/','php.zhao');设置后,浏览器中响应头信息如下:

访问效果如下:

默认状态下,PHP和JS都可以访问,我们来测试服务器使用如下代码获取Cookie:
echo $_COOKIE['name']."<br>";
echo $_COOKIE['age']."<br>";
echo $_COOKIE['sex']."<br>";
?>

<script>
    document.write(document.cookie);//JS获取cookie
</script>
效果如下:

如需仅服务器访问,需设置第7个参数为true。代码如下:
$time=time()+3600;//有效期一小时
setcookie('name','lisi',$time,'/','php.zhao',false,true);
setcookie('age',18,$time,'/','php.zhao');
setcookie("sex","男",$time,'/','php.zhao');访问效果如下:


PHP并未提供删除cookie的方法,我们可以通过给键值名赋值false的方式删除cookie,也可以通过设置一个已过去的时间删除cookie。
注意:cookie仅可以存放字符串和数字。

cookie机制存在以下的缺点

1、因为在浏览器中可以看到cookie 的值,所以安全性低

2、因为只能保存字符串和数字,所以可控性差

3、因为数据放在请求头中传输,增加了请求时候的数据负载。

4、因为数据存储在浏览器中,但浏览器存储空间是有极限的,一般是4K。


所以又产生了一种新的机制,那就是session,我们下次接着再讲。


xingkong100 发表于 2023-2-15 18:49:27

很好```受教了``

wly365 发表于 2023-2-17 09:11:28

写的很好,想成为一个好的程序员,需要努力努力再努力!!!

alw_ddd 发表于 2023-2-19 08:30:52

恩,有所感悟哦,我现在也在学编程,由于我不是计算机专业的,但我会继续一如既往的学下去的 哦,从头开始哦,我相信自己。希望你们以后会指点指点哦

yydf1234 发表于 2023-2-20 17:44:09

终于明白了自己的方向,感谢楼主

mingda 发表于 2023-2-22 08:01:54

tongyi

cks1234567 发表于 2023-2-23 15:16:15

看了此帖,让我更加的感到我自身的不足`~~我要更加努力的学习~学习~~学海是无涯的`~~~

dinggel 发表于 2023-2-25 07:31:38

耐人寻味!!!!

sunkeza 发表于 2023-2-27 16:52:38

没什么我只是一个大专生相信让我出题的话同样范畴的题我也可以不他考住没有两个人的思维是一样的很简单的道理他的想法不可能和我的想法一样

odehz 发表于 2023-3-1 07:55:12

写的非常棒。感触很深!
页: [1] 2 3 4
查看完整版本: Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制