cookie
参考:https://baijiahao.baidu.com/s?id=1716022923857938084&wfr=spider&for=pc
前言
本篇将对Cookie做介绍,对其属性进行详细说明,在js和java中对cookie的处理,以及http中与cookie相关的字段。
介绍
cookie可以看成是一种对象结构,name和value属性是键值对,其他属性做辅助控制。
cookie在浏览器以一段文本的形式存储,在响应中以Set-Cookie字段设置,在请求中以Cookie字段携带。
http协议本身是无状态的,而cookie机制为http协议实现了状态存储与沟通。
一般的使用过程:
- 服务器容器构造cookie,在响应中返回
- 浏览器接收cookie后,存储到本地
- 浏览器访问符合要求的目标资源时,携带cookie
Cookie属性
name和value
name和value分别表示一个cookie的名和值。都可以进行设置。
这两个属性是cookie最重要的信息。
1、不同用户同一功能cookie具有相同name
比如:
name=zhangshan;
age=18;
这样做的好处是,能够基于约定好的cookie名直接读取cookie值
2、不同用户同一功能cookie具有不同name
有些网站,对于同一个功能的cookie,各用户的该cookie的名可能不相同,比如:
name_zhangshan=18;
account_159xxxx=123456
在解析cookie时,如果只有一个cookie,则按照约定的名代表一个信息,值代表另外一个信息。当然,更常见的是使用前缀来声明某一cookie的名是什么,以及其配对的值是什么。
domain
1、默认值
如果响应中cookie未设置domain属性,则浏览器读取请求的主机部分作为该属性值。比如:
localhost
127.0.0.1
www.cc.com
2、响应设置
响应中cookie的domain属性可以在服务端设置,但是不能设置为.xx.com形式,会报错500.
可以将domain设置为当前请求的相同主机,也可以是其父级或者子级域名,但不能是其他,否则浏览器会拒绝cookie。警告信息:
尝试通过Set-Cookie标头设置Cookie的操作被禁止了,因为此标头的“Domain”属性对当前的主机网址而言无效。
3、请求匹配
对于domain值是请求的主机的相同或者父级域名时,匹配成功。然后匹配path属性。
path
1、默认值
如果响应中cookie未设置domain属性,则浏览器读取请求的路径部分的上一级目录作为该属性值。
比如请求/a/b/c,则默认将/a/b作为path值,对于一切/a/b/下的路径进行匹配。
2、响应设置
如果对domain下任意路径匹配,则可以设置为/
3、请求匹配
/匹配任意路径
/a匹配/a/下的任意路径
expires和max-age
max-age和expires都表示该cookie的有效截止时间。
max-age的值是整数,单位为秒,表示多少秒后过期,而expires必须是GMT格式。
这两个属性设置一个即可,另一个被计算出来。在java servlet中通过指定max-age计算。
- 如果是默认的,未进行设置该信息,则表示该cookie是会话型,当前浏览器关闭前有效。
- 如果是一个确定的时间,则表示该cookie是持久型,其值表示cookie有效时间,在到达该时间时,浏览器会删除该cookie。
- 如果直接设置的一个过去的时间,相当于删除前端存储的该cookie。
httponly
如果cookie中包含该标志,表示无法使用js读取该cookie。能够防止xss盗取登录凭证cookie或存储敏感信息的cookie。
secure
如果cookie中包含该标志,则必须使用https协议传输该cookie。
使用
1、http与cookie
2、浏览器与cookie
3、js与cookie
4、java与cookie
其他
端口
注意,cookie在满足domain和path匹配后,端口并无影响。比如
http://localhost:8081/login
http://localhost:8082/login
这两个接口设置cookie,相同domain,相同path将被后者设置覆盖
一方设置的cookie,在请求另一个站点时,满足path要求也会被携带。
跨域
1、跨域设置cookie
综上所述,cookie可以设置为当前请求主机的相同域名,也可以是父级或子级域名。
2、跨域携带cookie
(1)一般情况下
请求的URL的主机域名与cookie的domain相同,或者是cookie的domain值的子域名,则匹配成功该cookie。
(2)其他跨域情况
参考:https://www.cnblogs.com/hofmann/p/10750983.html
由请求的目标服务器设置Access-Control-Allow-Origin和Access-Control-Allow-Credentials两个字段决定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码