3.1.2 PHP中COOKIE的学习

什么是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快速入门

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部