HTTPCookie

编程

一、工作流程

1、当浏览器首次访问服务器时,服务器会创建一个独特的身份标识数据,格式是 key=value 放进 Set-cookie 字段里随响应报文返回给浏览器。

2、浏览器收到响应报文后会把 Cookie值 存储起来,下次再请求时会自动放进 Cookie 字段里发送给服务器。

3、当服务器接受到带有 Cookie 字段 的请求,就通过 Cookie 里的值识别出用户的身份,提供个性化的服务。

二、Cookie 主要用于以下三个方面

  • 身份识别,实现有状态的会话事务(登录状态、购物车等)

  • 个性化设置(用户自定义设置、主题等)

  • 广告跟踪

三、Cookie 分类:按存储位置不同可分为 会话期 Cookie持久性 Cookie

  • 会话期 Cookie:存储在内存,仅在浏览器运行期间有效,浏览器关闭后会自动删除。过期时间显示为 SessionN/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

回到顶部