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两个字段决定。

csp

https://www.cnblogs.com/kinyoobi/p/15341248.html

posted @ 2022-04-27 15:13  黑白猫123  阅读(1370)  评论(0编辑  收藏  举报