一、Cookie介绍

因为HTTP协议是无状态的,每次请求都是独立的,服务器端无法判断两次请求是否来自同一个用户,进而也就无法判断用户的登录状态,也不知道用户上一次做了什么。

所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。

服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

Cookie是服务器端发送给客户端的一段特殊信息,这些信息以文本的方式存放在客户端,客户端每次向服务器端发送请求时都会带上这些特殊信息。

具体过程是:客户端发送请求到服务端,然后服务端返回的responseheaders中会有Set-Cookie这个字段,将信息写入Cookie中。然后在下一次客户端请求接口时,会在requestheaders里带上这个Cookie字段,这样服务器就可以拿到这些信息,达到了维持状态的目的。



Cookie主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

二、Cookie的属性

1、 domain和path属性

domain 指定了该 Cookie 所属的域名,默认情况下,domain 会被设置为创建该 Cookie 时所在的域名。如果不指定,默认为 origin,不包含子域名。如果指定了Domain,则一般包含子域名。

例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如developer.mozilla.org)。

而 path 则指定了该 Cookie 所属的路径,注意子路径也会被匹配。

例如,设置 Path=/docs,则/docs/Web/ 这个地址也会匹配。

domain 和 path 两者一起来限制了该 Cookie 允许被哪些 URL 访问。

2、 SameSite属性

SameSite: Cookie 允许服务器要求某个 cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

SameSite 可以有下面三种值:

None:浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写。

Strict:浏览器将只发送相同站点请求的 Cookie(即当前网页 URL 与请求目标 URL 完全一致)。

Lax:在新版本浏览器中,为默认选项,Same-site Cookies 将会为一些跨站子请求保留,如图片加载或者 iframe 不会发送,而点击a标签会发送;

大多数主流浏览器的SameSite的默认值已经是Lax了。如果想要指定 Cookies 在同站、跨站请求都被发送,现在需要明确指定 SameSite 为 None。(所以不要再问为什么接口返回了Set-Cookie但是却没有设置成功了,大概率原因在这里。)

3、 Expires/Max-Age

Expires :具体到期时间,UTC格式。如果没有设置该选项,则默认有效期为session,即会话cookie,这种cookie在浏览器关闭后就没有了。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Max-Age属性指定从现在开始 Cookie 存在的秒数,比如60 60 24 * 365(即一年)。过了这个时间以后,浏览器就不再保留这个 Cookie。

如果同时指定了Expires和Max-Age,那么Max-Age的值将优先生效。

  • Max-Age为正数: cookie 会在 max-age 秒之后被销毁
  • Max-Age为负数时: cookie 只在浏览器会话期间存在,当用户关闭浏览器窗口后这些值也会随之销毁
  • Max-Age 为 0 时: cookie 将被立即销毁

4、 HttpOnly属性

如果这个属性设置为true,意思就是告之浏览器该 cookie 绝不能通过 JavaScript 的 document.cookie 属性访问。可以避免跨域脚本 (XSS) 攻击。

5、 Secure属性

标记为 Secure的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端。

三、Cookie的相关操作

1.创建Cookie:

直接使用document.cookie = 设置即可document.cookie= "test=" + '123';

2.读取Cookie:

直接调用函数,例如let cookie = getCookie(); cookie.name即为对应cookie。

读取Cookie函数functiongetCookie() {let cookieArr = document.cookie.split("; "); // 特别注意!cookie中的数据都是以分号加空格区分开let obj = {};cookieArr.forEach( v => {let arr = v.split("="); obj[arr[0]] = unescape(arr[1]); // unescape 解码 });return obj}

3、删除Cookie:

直接调用:delCookie(“xxx”);

//删除CookiefunctiondelCookie(name){// 将 cookie 的 max-age 属性设置 0 来实现对 cookie 的删除document.cookie = `${name}=;max-age=0`; }

在ios系统上面,设置Cookie为汉字时会设置失败,所以需要将汉字进行编码,再储存到Cookie,取出来的时候也需要解码,encode:escape(),decode:unescape()。

四、其他

  • Cookie是跨域的,也就是在不同的域名中,访问的Cookie的时候,只能访问对应的域名的Cookie。
  • 每个Cookie的大小一般不超过4KB,超过以后,Cookie将会被忽略,不会被设置
  • 浏览器每次向服务器发起请求,就会自动附上Cookie

Cookie测试之详解相关推荐

  1. php的cookie教程,PHP4之COOKIE支持详解

    PHP4之COOKIE支持详解 发布时间:2016-06-17 来源: 点击: 次 PHP4之COOKIE支持详解 建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的信息,在PHP中提供了两 ...

  2. cookie 操作详解 (asp.net javascript)

    (1)ASP.NET cookie 操作详解|cookie 写入.读取.修改.删除2008年10月18日     //写入     protected void Button2_Click(objec ...

  3. python获取登录后的cookie_python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  4. cookie setSecure详解

    1. 前言 最近项目用Sparrow Health System检测漏洞,发现存在一个setSecure安全漏洞问题,于是网上搜索了一下,这里记录一下. 2. 问题 在cas中或其他web开发中,会碰 ...

  5. Cookie用法详解

    cookie简介 1. 定义 cookie是由服务器发送给客户端(浏览器)的小量信息. 2. 作用 cookie是键值对形式存储的少量信息,那它有什么作用呢? 我们知道,平时上网时都是使用无状态的HT ...

  6. php 中 app cookie管理,详解iOS App开发中Cookie的管理方法

    一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返 ...

  7. 关于登录记住密码使用cookie的详解

    下面是我看的一篇文章引用过来,很易懂 设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="u ...

  8. Javascript cookie使用详解

    2019独角兽企业重金招聘Python工程师标准>>> 设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: docume ...

  9. 安全cookie setSecure详解

    http://www.coin163.com/java/docs/201304/d_2775029502.html 在cas中或其他web开发中,会碰到安全cookie的概念,因为CAS中TGT是存放 ...

  10. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

最新文章

  1. js 文件不让通过地址访问_区块链与以太坊实战(5):访问以太坊节点的N中方式...
  2. Linux是否兼容windows跨区卷,简单卷与跨区卷的区别介绍
  3. 在IDEA中关于项目java版本问题
  4. break后面的语句还执行吗_【自学C#】|| 笔记 5 条件语句if、switch
  5. Redis中的键值过期操作
  6. 导航器 Navigator
  7. pyspark编写UDF函数
  8. Raphael的set使用
  9. python相关工具使用技巧(pip)
  10. 初一计算机课学什么,初一有哪几门课程 各科满分是多少
  11. 疑难杂症 | Win10解压文件后乱码
  12. favicon.ico在线制作,在线Favicon.ico制作转换工具
  13. 二阶Volterra矩阵生成 matlab
  14. 什么是USB金手指?
  15. kaggle常见操作及错误
  16. AC-DC电源管理芯片选型及应用
  17. springboot好博客记录
  18. 帝国cms如何导入php模板,帝国CMS模板组导入导出更换模板
  19. python 连接hive_《go语言从入门到入坟》Go 操作 数据库、Redis、HDFS
  20. 我用Python告诉你,充气娃娃什么感觉,呜呜呜

热门文章

  1. qt_翻译文件常用缩写
  2. Android扫码枪数据读取封装
  3. 双目立体匹配之代价聚合
  4. 常用 EPSG 编号对应的投影信息
  5. Ajax的回调函数(js与JQuery写法)
  6. java openxml_Excel单元格中的OpenXml和Date格式
  7. python 返回列表长度_Python通过len函数返回对象长度
  8. matlab传递函数状态方程转换,利用matlab对状态方程与传递函数转换
  9. 360软件小助手-壁纸存储路径
  10. 小米手机开发者选项在哪?小米手机怎么打开开发者选项