HTTPCookie
一、工作流程
1、当浏览器首次访问服务器时,服务器会创建一个独特的身份标识数据,格式是 key=value
放进 Set-cookie
字段里随响应报文返回给浏览器。
2、浏览器收到响应报文后会把 Cookie值
存储起来,下次再请求时会自动放进 Cookie
字段里发送给服务器。
3、当服务器接受到带有 Cookie
字段 的请求,就通过 Cookie
里的值识别出用户的身份,提供个性化的服务。
二、Cookie 主要用于以下三个方面
身份识别,实现有状态的会话事务(登录状态、购物车等)
个性化设置(用户自定义设置、主题等)
广告跟踪
三、Cookie 分类:按存储位置不同可分为 会话期 Cookie
和 持久性 Cookie
会话期 Cookie:存储在内存,仅在浏览器运行期间有效,浏览器关闭后会自动删除。过期时间显示为
Session
或N/A
。持久性 Cookie:存储在本地,可以指定过期时间
Expires
或有效期Max-Age
。
四、Cookie 的属性
- 有效期
Expires:过期时间,绝对时间点。
Max-Age:收到报文后多久的过期时间,单位是秒。设置为 0 时 立刻失效。
两者可以同时使用,但会优先 Max-Age 计算失效期。
- 作用域:让浏览器仅发送给特定的服务器和 url,避免被其它网站盗用。
Dnmain 和 Path 指定 Cookie 所属的域名和路径。
浏览器发送 Cookie 前会从 url 中提取出 host 和 path 部分来对比 Cookie 的属性,如果满足了条件,才会在请求头里发送 Cookie。
- 安全性
HttpOnly:Cookie 只能通过浏览器 HTTP 协议传输。也就杜绝了 document.cookie 获取 Cookie 的可能。
Secure:Cookie 仅能用 HTTPS 协议加密传输。
SameSite:可以防范 CSRF(跨站请求伪造)攻击。
SameSite=Strict:严格限定 Cookie 不能随跳转链接跨站发送。
SameSite=Lax: 禁止 POST 跨站发送,但允许 GET/HEAD 等安全方法。
五、怎样使用?利用 PHP 函数 setcookie
测试使用
参数 介绍
name
Cookie 名称
value
Cookie 值,存储在本地
expire
过期时间,使用 Unix 时间戳(PHP 内部作了转换)
path
服务器路径,默认值设置 Cookie 的当前目录
domain
域名或子域名
secure
设置 Cookie 是否仅通过 HTTPS 连接传给客户端
httponly
Cookie 是否仅通过 HTTP 协议访问。如设为 True, JavaScript 这些脚本无法访问,即有效减少 XSS 攻击
// PHP setcookie 设置 Cookie// 开发者工具:Application->Storage->Cookie
// 能看到有条 name 为 Gnahz、value 为 Test-Cookie 和 1 小时后过期的 Cookie。
setcookie("Gnahz", "Test-Cookie", time()+3600);
// JavaScript XSS 攻击获取 Cookie// 输出:Gnahz=Test-Cookie
document.cookie;
// 设置 httponly,让 Cookie 仅通过 HTTP 协议访问
// 输出:""
setcookie("Gnahz", "Test-Cookie", time()+3600, "", "", false, true);
以上是 HTTPCookie 的全部内容, 来源链接: utcz.com/z/514281.html