Cookie测试之详解
一、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测试之详解相关推荐
- php的cookie教程,PHP4之COOKIE支持详解
PHP4之COOKIE支持详解 发布时间:2016-06-17 来源: 点击: 次 PHP4之COOKIE支持详解 建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的信息,在PHP中提供了两 ...
- cookie 操作详解 (asp.net javascript)
(1)ASP.NET cookie 操作详解|cookie 写入.读取.修改.删除2008年10月18日 //写入 protected void Button2_Click(objec ...
- python获取登录后的cookie_python爬虫使用cookie登录详解
前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...
- cookie setSecure详解
1. 前言 最近项目用Sparrow Health System检测漏洞,发现存在一个setSecure安全漏洞问题,于是网上搜索了一下,这里记录一下. 2. 问题 在cas中或其他web开发中,会碰 ...
- Cookie用法详解
cookie简介 1. 定义 cookie是由服务器发送给客户端(浏览器)的小量信息. 2. 作用 cookie是键值对形式存储的少量信息,那它有什么作用呢? 我们知道,平时上网时都是使用无状态的HT ...
- php 中 app cookie管理,详解iOS App开发中Cookie的管理方法
一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返 ...
- 关于登录记住密码使用cookie的详解
下面是我看的一篇文章引用过来,很易懂 设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="u ...
- Javascript cookie使用详解
2019独角兽企业重金招聘Python工程师标准>>> 设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: docume ...
- 安全cookie setSecure详解
http://www.coin163.com/java/docs/201304/d_2775029502.html 在cas中或其他web开发中,会碰到安全cookie的概念,因为CAS中TGT是存放 ...
- HTTP Session、Cookie机制详解
一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...
最新文章
- js 文件不让通过地址访问_区块链与以太坊实战(5):访问以太坊节点的N中方式...
- Linux是否兼容windows跨区卷,简单卷与跨区卷的区别介绍
- 在IDEA中关于项目java版本问题
- break后面的语句还执行吗_【自学C#】|| 笔记 5 条件语句if、switch
- Redis中的键值过期操作
- 导航器 Navigator
- pyspark编写UDF函数
- Raphael的set使用
- python相关工具使用技巧(pip)
- 初一计算机课学什么,初一有哪几门课程 各科满分是多少
- 疑难杂症 | Win10解压文件后乱码
- favicon.ico在线制作,在线Favicon.ico制作转换工具
- 二阶Volterra矩阵生成 matlab
- 什么是USB金手指?
- kaggle常见操作及错误
- AC-DC电源管理芯片选型及应用
- springboot好博客记录
- 帝国cms如何导入php模板,帝国CMS模板组导入导出更换模板
- python 连接hive_《go语言从入门到入坟》Go 操作 数据库、Redis、HDFS
- 我用Python告诉你,充气娃娃什么感觉,呜呜呜