PHP中cookie知识点学习


Posted in PHP onMay 06, 2018

什么是cookie

cookie,即小饼干,是保存在用户代理端(浏览器是最常见的用户代理)的一些数据片段。浏览网页时,浏览器会将 当前页面有效的 cookie放在请求的头部发送到服务端。

cookie组成

cookie由以下几部分组成:

domain,cookie所属的域名。浏览器发送cookie时,会检查cookie所属的域名,相符才会发送。浏览器会将tlanyan.me域下的cookie发送到www.tlanyan.me或者dev.tlanyan.me的页面请求中,但不会发送给www.baidu.com。同样,dev.tlanyan.me的cookie不能发送给tlanyan.me,因为限定了域名为dev子域。

path,cookie所属路径。设置为/author中的cookie不会发送到/category路径下,但是设置路径为/的cookie会发送到所有页面请求。

name, cookie的名称(键名)。

value, cookie的值(内容)。

expires,过期时间。

secure,是否仅在https时才会传送该cookie。

httponly,是否只用作http传递用。当设置为true时,浏览器端的脚本语言将无法访问到该cookie。

cookie的用途

cookie主要用在以下方面:

http是无状态的协议,为了维持会话需要额外的数据做标记,cookie是最常用的手段。常见的PHPSESSID和JSESSIONID这两类cookie,分别用在PHP和Java web应用中维持会话。

有些数据需要存放在客户端,cookie是一种选择。用户勾选“下次不再提示”后,该标志可保存到客户端,再次访问程序读取设定再决定是否显示。随着HTML 5的普及,这部分功能正慢慢被localStorage取代。

PHP端的cookie操作

读取cookie可以通过$_COOKIE超全局变量读取到用户端传来的所有cookie。$_COOKIE是一个数组,可以遍历读取发送过来的cookie的名称和值。浏览器只发送了cookie的键值到服务端,故而无法读取到cookie的domain/path/exipres等信息,因为。

PHP提供了setcookie函数来发送cookie到客户端。setcookie的函数签名是:

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

参数与cookie的组成内容相对应: expires默认为0,表示仅当前会话有效,用户关闭浏览器后该cookie将被清除;path默认为当前页面路径,即网址最后一个反斜杠前的部分;domain默认为当前页面的域名,如果要扩大使用范围,可设置为父级域名或者顶级域名; httponly默认为false,建议设置为true避免XSS攻击。

删除cookie,只需要设置cookie的expires为过去的时间戳即可,例如 time() ? 3600。所以要删除foo这个cookie,代码可以为

setcookie('foo', '', time() - 3600);

cookie的良好实践

从cookie字面意思便可看出,保存的是数据片段。web开发中cookie使用的频率比较高,应该多加以理解。以下是一些使用cookie的良好实践:

不应该在cookie中保存过大和过多的数据;
cookie在客户端和传输中是明文可见的,不应该在cookie中保存敏感信息;
为了站点和用户安全,尽可能将cookie的httponly属性设置为true;
cookie是客户端完全控制的,也属于外部输入,服务端不可盲目相信,应对其进行过滤。
其他

cookie是随请求发送而来,随响应而设置到客户端。理解了这个过程,就可以明白一些新手常见的问题,例如以下代码:

if (!isset($_COOKIE['foo']) {
   setcookie('foo', 'foobar');
 } 
 $foo = $_COOKIE['foo'];

在未设置foo这个cookie的情况下,第5行运行会出错。原因在于setcookie是设置本次响应的cookie信息,需要浏览器接收到响应并设置后,才能在后续的请求中附带上该cookie,并没有反应到本次请求上。

同理,cookie存在于请求和响应的头部信息中,而头部应该在请求正文之前,所以setcookie的函数上下文使用限制同header函数,即:在此之前不能已经发送过响应正文。

PHP 相关文章推荐
php下过滤HTML代码的函数
Dec 10 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
php实现微信企业转账功能
Oct 02 PHP
分析php://output和php://stdout的区别
May 06 #PHP
PHP 布尔值的自增与自减的实现方法
May 03 #PHP
PHPExcel 修改已存在Excel的方法
May 03 #PHP
PHP中PDO事务处理操作示例
May 02 #PHP
PHP简单实现解析xml为数组的方法
May 02 #PHP
PHP实现动态压缩js与css文件的方法
May 02 #PHP
Yii2框架数据验证操作实例详解
May 02 #PHP
You might like
PHP 单引号与双引号的区别
2009/11/24 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
Python如何访问字符串中的值
2020/02/09 Python
Python API len函数操作过程解析
2020/03/05 Python
基于python实现模拟数据结构模型
2020/06/12 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
大家检讨书5000字
2014/02/03 职场文书
法制宣传实施方案
2014/03/13 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
通报表扬范文
2015/01/17 职场文书
2015年教研员工作总结
2015/05/26 职场文书