浅学Cookie

Cookie学习

前言:我们通常说的无状态的HTTP协议其实是HTTP1.x,所谓的无状态,就是网页一旦关闭,浏览器和服务器的连接就会断开,下次打开网页又会重新连接,对于事务处理没有记忆能力。于是乎,为了解决HTTP无状态导致的问题,出现了cookie,说到底其实cookie是为了解决客户端和服务端会话状态的问题。

cookie:网页浏览器保存用户信息的文件,一般不超过4KB的小型文本文件,由一个名称(Name),一个值(Value)和其他几个用于控制Cookie有效期,安全性,使用范围的可选属性组成。

一。Cookie的查看

我们可以在浏览器的开发者工具中查看到当前页面的Cookie:
在这里插入图片描述

虽然我们在浏览器中可以看到Cookie,但并不意味着Cookie就只是存放在浏览器上的,它还可以存在本地文件里,存放在本地的好处就是即使关闭了浏览器,Cookie仍然可以生效。

二。Cookie的设置

接下来我们来看一下Cookie是怎么进行设置的:

1.客户端发送HTTP请求到服务器
2.当服务器收到HTTP请求时,在响应头里面添加一个Set-Cookie字段(可以在请求返回的Response Headers中看到)
3.浏览器收到响应后保存下Cookie
4.之后对该服务器每一次请求中都通过Cookie字段将Cookie信息发送给服务器

三。Cookie的属性

从上图中可以看到Cookie的一些属性:

  • Name/Value

    用JavaScript操作Cookie的时候注意对Value进行编码处理

  • Expires

    用于设置Cookie的过期时间,比如:

    Set-Cookie:id=a3fWa;Expires=Wed,21 Oct 2018 09:45:00 GMT;
    

    当Expires缺省时,表示是会话性Cookie,像上图Expires的值为Session,表示的就是会话性Cookie。而相对的持久性Cookie会保存在硬盘中,直到过期或者清除Cookie。

  • Max-Age

    用于设置在Cookie失效之前需要经过的秒数。例如

    Set-Cookie: id=a3fWa; Max-Age=604800
    

    Max-Age可以为正数、负数、甚至是0。

    如果max-Age为正数时,浏览器会将其持久化,即写到对应的Cookie文件中。为负数时,则表示该Cookie只是一个会话性Cookie。为0时,则会立即删除这个Cookie。

    假如Expires喝Max-Age都存在,Max-Age优先级更高。

  • Domain

    指定了Cookie可以送达的主机名。假如没有指定,那么默认值为当前文档访问地址中的主机部分。

    不能跨域设置Cookie,比如阿里域名下的页面不能设置Domain为百度:

    Set-Cookie: qwerty=219ffwef9w0f; Domain=baidu.com; Path=/; Expires=Wed, 30 Aug 2020 00:00:00 GMT
    
  • Path

    指定了一个URL路径,这个路径必须出现在要请求的资源的路径中才可以发送Cookie首部。比如设置Path=/docs,/docs/Web/下的资源会带Cookie首部,/test则不会携带Cookie首部。

    Domain和Path标识共同定义了Cookie的作用域:即Cookie应该发送给哪些URL。

  • Secure属性

    标记为Secure的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。

  • HTTPOnly

    可以防止客户端脚本通过document.cookie等方式访问Cookie,有助于避免XSS攻击。

  • SameSite(之前是默认None,Chrome80默认Lax

    可以让Cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

    属性:

    • Strict :仅允许一方请求携带Cookie,即浏览器将只发送相同站点请求的Cookie,即当前网页URL与请求目标URL完全一致。
    • Lax:允许部分第三方请求携带Cookie。
    • None:无论是否跨域站都会发送Cookie。

    跨域和跨站不是一个概念,同站(same-site)/跨站(cross-site)和第一方(first-party)/第三方(third-party)是等价的。但是与浏览器同源策略(SOP)中的同源(same-origin)/跨域(cross-origin)是不同的。

    同源策略是指:两个URL的协议,端口和主机名一致。而同站只要两个URL的eTLD+1(有效顶级域名+二级域名,例如baidu.com)相同即可,不需要考虑协议和端口。

    • HTTP接口不支持SameSite=None

      如果想加SameSite=None属性,那么该Cookie就必须同时加上Secure属性,表示只有在HTTPS协议下该Cookie才会被发送。

    • 需要UA检测,部分浏览器不能加SameSite=None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值