相信很多同学对cookie耳熟能详,因为不管前端的还是后端的童鞋,在开发过程中对cookie的使用时必不可少的,下面就有我们一起来学习学习在浏览器中的cookie的内容。
文章目录
目录
前言
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 。
一、cookie的用途
做开发的同学都知道,cookie是一个很重要的内容点,一般跟跨域跨站相关联。所以学习cookie前,我们先了解了解跨域跨站的概念。
在cookie中,一般认为当二级域名跟顶级域名一样就是同站
例如,aa.bb.com跟cc.bb.com,这两个域名的二级域名跟顶级域名是一样的,所以这两个域名是同站的,而bb.com跟cc.com的二级域名不一样,所以认为这是跨站。
当协议、域名或者端口号不同时,就可以认为是跨域
在控制台输入document.cookie可以看到cookie的相关信息
有许多的字符串信息,这些信息其实都是key=value的形式,cookie中的信息存储就是通过定义key=value形式的数据进行存储。
cookie中保存的信息一般都是加密过的用来保存和验证用户信息及状态的数据,我们平常的记住账号、记住密码等操作都是通过cookie来实现的。另外cookie是保存在客户端上的,一旦删除后就只能重新设置cookie。
二、cookie属性的含义和使用
在cookie中,跨域的要求要比跨站严格很多。
这上面我们可以看到,一个cookie中每列都有12个不同的信息,这些属性就是cookie重要的组成。
下面讲讲一些比较重要的属性:
1.key、value
第一第二个属性分别为单条信息的名称跟值,这个没什么。
2.domain
这个属性表示该cookie有效的作用域范围。
仔细看可以看到,这些作用域范围有些是带 . 而有些是不带的
带点的说明这个cookie可以作用于当前域及子域,而不带点的说明该cookie只能作用于当前域。
另外需要注意的
当我设置一个cookie而不指示Domain时,它默认作用于当前域。当我给其设置Domain后,它的作用就变成了作用于当前域及子域。
再另外,如果你设置的Domain=a.com或者Domain=.a.com时,其实这两个效果是一样的。
3.Path
这个属性是指定URL的路径的,比如我在a.com/a设置了一个Path为/a,那么它在a.com/a/b是可以访问得到,而在a.com/b却访问不到。
4.expires、max-age
expires是用来设置cookie在什么时间点会失效,而max-age设置cookie在多久后会失效(秒)。
当两个属性都有时,max-age的优先级会更高
在控制台中可以看到cookie失效的时间点或者时长,而会话则会在断开连接后失效。当max-age设置为-1或者0时,则表示删除该cookie。
5.HttpOnly
这个属性我们可以看到有些cookie是打√的,如果打√的话是无法使用js对该cookie操作的,只能是服务端通过响应头的set-cookie属性设置然后放在客户端上。
当我们设置的cookie带HttpOnly时,所设置的cookie是不会显示的
通过设置该属性,可以有效防止用户关键信息泄露
6.secure
这个属性如果被选上的话说明该cookie只能通过https协议来传输,而http协议却不能传输该cookie。
比如我在带https协议的网站下设置了带secure的cookie,当我向http协议的网站发送请求时,该cookie并不会带过去。
7.samesite
该属性可以限制跨站请求时cookie的发送。
该属性有3个默认值【none】【lax】【strict】,其中,none对cookie的约束是最小的,它表示无论跨站都发送cookie。strict表示只要跨站,就不会携带cookie。而lax是samesite的默认值,它只允许在部分跨站请求中携带cookie,例如,有这个值的cookie在a标签、预加载或者在get表单中请求会携带cookie,而post表单、iframe或者Ajax请求都不会发送cookie。
none虽然对cookie的约束最小,但是只有在https协议中才会有效,而且该cookie是必须有secure属性的。
8.sameparty
提到这个属性就不得不了解一下【first-party sets】策略,当多个不同的域名同属于同一个组织或者机构的时候,我们希望这些不同域名之间可以共享cookie,first-party sets
提出了一种明确定义在同一主体下拥有和运营的多个站点关系的方法。
这个策略来源于浏览器的隐私沙提案中对身份进行分区以防止跨站点跟踪的概念,在站点之间划定界限,限制对可用于识别用户的任何信息的访问。
目前first-party sets
已经确定的原则如下:
1.
first-party sets
中的域必须由同一组织拥有和运营。
2.所有域名应该作为一个组被用户识别。
3.所有域名应该共享一个共同的隐私政策。
提到这个策略主要是sameparty属性就是为了配合这个策略而添加的,所有使用了这个策略的站点都必须要有sameparty属性。
总之,对于cookie的学习基本上就只有这些,需要熟练的使用cookie还需要个人自己更加的去深挖和了解cookie。有句话说得好:书山有路勤为径,学海无涯苦做舟,能够学成是没有捷径的。