什么是COOKIE?
Cookie通常也叫做网站cookie,浏览器cookie或者http cookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。
Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经有欧洲和美国的一些律师以保护用户隐私之名对cookie的种植宣战了。更严重的是,黑客可以通过偷取Cookie获取受害者的帐号控制权。
COOKIE有什么用?
A.会话管理
1.记录用户的登录状态是cookie最常用的用途。通常web服务器会在用户登录成功后下发一个签名来标记session的有效性,这样免去了用户多次认证和登录网站。
2.记录用户的访问状态,例如导航、购物车、用户的注册流程。
B.个性化信息
1.Cookie也经常用来记忆用户相关的信息,以方便用户在使用和自己相关的站点服务。例如:ptlogin会记忆上一次登录的用户的QQ号码,这样在下次登录的时候会默认填写好这个QQ号码。
2.Cookie也被用来记忆用户自定义的一些功能。用户在设置自定义特征的时候,仅仅是保存在用户的浏览器中,在下一次访问的时候服务器会根据用户本地的cookie来表现用户的设置。例如google将搜索设置(使用语言、每页的条数,以及打开搜索结果的方式等等)保存在一个COOKIE里。
C.记录用户的行为
最典型的是公司的TCSS系统。它使用Cookie来记录用户的点击流和某个产品或商业行为的操作率和流失率。当然功能可以通过IP或http header中的referrer实现,但是Cookie更精准一些。
与COOKIE相关的函数
setcookie()
描述:设置cookie
语法:setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false ) : bool
PHP 7.3.0 起有效的签名:
setcookie ( string $name , string $value = "" , array $options = [] ) : bool
说明:
A. $name
用于指定cookie名称
B. $value
用于指定cookie的值。这个值储存于用户的电脑里,请勿储存敏感信息。比如 name 是 ‘cookiename’, 可通过 $_COOKIE['cookiename']
获取它的值。
C. $expires
用于设置cookie的生命周期(Unix时间戳)。
注意:
你可能注意到了,expires 使用 Unix 时间戳而非 Wdy, DD-Mon-YYYY HH:MM:SS GMT 这样的日期格式,是因为 PHP 内部作了转换。
D. $path
Cookie 有效的服务器路径。 设置成 ‘/’ 时,Cookie 对整个域名 domain 有效。 如果设置成 ‘/foo/’, Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。
E. $domain
Cookie 的有效域名/子域名。 设置成子域名(例如 ‘www.example.com’),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。 要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是 ‘example.com’)。
F. $secure
设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。 设置成 true 时,只有安全连接存在时才会设置 Cookie。 如果是在服务器端处理这个需求,程序员需要仅在安全连接上发送此类 Cookie (通过 $_SERVER["HTTPS"]
判断)。
G. $httponly
设置成 true,Cookie 仅可通过 HTTP 协议访问。 这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。 要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。 true 或 false
H. $options
一个关联数组,可以有任何一个键expires、path、domain、secure、httponly和samesite。如果有任何其他的键存在,将产生一个E_WARNING级别的错误。这些值的含义与同名参数的描述相同。samesite元素的值应该是None、Lax或Strict。如果没有给出任何一个允许的选项,它们的默认值与显式参数的默认值相同。如果省略samesite元素,则不设置SameSite cookie属性。
本文是全系列中第21 / 24篇:PHP快速入门
- 1.1.1 PHP课程介绍
- 1.1.2 代码编辑器的安装和PHP环境的配置
- 1.1.3 PHP基础语法
- 1.2.1 PHP中的变量
- 1.2.2 PHP中的数据类型
- 1.2.3 PHP中的数据类型转换与比较
- 1.3.1 PHP中的常量
- 1.3.2 PHP中的预定义变量
- 1.4 PHP中的表达式与运算符
- 1.5 PHP中的流程控制
- 2.1.1 PHP函数的结构
- 2.1.2 PHP函数的参数
- 2.1.3 PHP复杂函数
- 2.1.4 PHP函数实战
- 2.2.1 PHP字符串函数库简介
- 2.2.2 PHP字符串函数实战练习
- 2.3 PHP数组简介和定义方式
- 2.4.1 PHP数组的使用、转换、运算符
- 2.4.2 PHP数组的应用
- 3.1.1 PHP中SESSION的学习
- 3.1.2 PHP中COOKIE的学习
- 3.2.1 PHP文件目录函数库简介/操作/实战
- 3.2.2PHP文件操作相关的常用函数与类的封装
- 3.3 深入浅出MySQL数据库