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

[复制链接]
查看: 116|回复: 0

585

主题

1179

帖子

6291

积分

管理员

人亦已歌

Rank: 12Rank: 12Rank: 12

积分
6291

活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

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

服务器设置Cookie的方法如下:

  1. header('name:tom');

  2. setcookie('name','lisi');
复制代码
服务器获取Cookie的方法如下:
  1. echo $_COOKIE['name'];
复制代码
默认状态下,关闭浏览器后,cookies自动消失,所以称为临时cookie。如需关闭浏览器后cookies不消失,需填写setcookie的第2个参数,如下:
  1. $time=time()+3600;//有效期一小时
  2. setcookie('name','lisi',$time);
  3. setcookie('age',18,$time);
  4. setcookie("sex","男",$time);
复制代码
当客户端请求以上代码所在的php文件时,服务器会把Cookies信息通过响应头返回给浏览器,如下:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
无论如何,cookie信息都不可以在不同的浏览器中共享。
默认状态下,cookies设置好以后,服务器中只能在当前目录和子目录下获取,如果需要整站有效需设置setcookie的第四个参数为/,如下:
  1. $time=time()+3600;//有效期一小时
  2. setcookie('name','lisi',$time,'/');
  3. setcookie('age',18,$time,'/');
  4. setcookie("sex","男",$time,'/');
复制代码
执行后浏览器会得到如下的结果:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
默认状态下,cookies设置好以后,不支持子域名共享,我们来测试一下,跨域访问的情况,如下:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
如需子域名共享,需设置setcookie的第五个参数,如下:
  1. $time=time()+3600;//有效期一小时
  2. setcookie('name','lisi',$time,'/','php.zhao');
  3. setcookie('age',18,$time,'/','php.zhao');
  4. setcookie("sex","男",$time,'/','php.zhao');
复制代码


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

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

默认状态下,不开启安全访问,如需仅https访问需设置第6个参数为true,设置后http将不能访问。设置代码如下:
  1. $time=time()+3600;//有效期一小时
  2. setcookie('name','lisi',$time,'/','php.zhao',true);
  3. setcookie('age',18,$time,'/','php.zhao');
  4. setcookie("sex","男",$time,'/','php.zhao');
复制代码
设置后,浏览器中响应头信息如下:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
访问效果如下:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
默认状态下,PHP和JS都可以访问,我们来测试服务器使用如下代码获取Cookie:
  1. echo $_COOKIE['name']."<br>";
  2. echo $_COOKIE['age']."<br>";
  3. echo $_COOKIE['sex']."<br>";
  4. ?>

  5. <script>
  6.     document.write(document.cookie);//JS获取cookie
  7. </script>
复制代码

效果如下:
Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
如需仅服务器访问,需设置第7个参数为true。代码如下:
  1. $time=time()+3600;//有效期一小时
  2. setcookie('name','lisi',$time,'/','php.zhao',false,true);
  3. setcookie('age',18,$time,'/','php.zhao');
  4. setcookie("sex","男",$time,'/','php.zhao');
复制代码
访问效果如下:

Cookie专题-这是全网讲的最清楚的Cookie原理和实现机制
PHP并未提供删除cookie的方法,我们可以通过给键值名赋值false的方式删除cookie,也可以通过设置一个已过去的时间删除cookie。
注意:cookie仅可以存放字符串和数字。

cookie机制存在以下的缺点

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

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

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

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


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


懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

精彩图文
 
 
在线客服
技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫

QQ|小黑屋|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表