cookie有关的知识

cookie指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(一般通过加密)。后端

cookie的特色:

1.服务器经过 Set-Cookie 响应头设置 Cookie跨域

2.浏览器获得 Cookie 以后,每次请求都要带上 Cookie浏览器

3.服务器读取 Cookie 就知道登陆用户的信息(email)缓存

4.cookie遵照同源策略,不过和AJAX略有区别:cookie只能在同一个域名中携带,访问baidu.com,baidu.com会带上baidu.com 的cookie,不会携带google.com的cookie,区别是cookie的可见性是向下的,好比说访问imgge.baidu.com,不只会带上imgge.baidu.com的cookie,还会带上baidu.com的cookie.安全

5.cookie存在本地客户端硬盘中bash

cookie的做用

Cookie主要用于如下三个方面:服务器

会话状态管理(如用户登陆状态、购物车、游戏分数或其它须要记录的信息)

个性化设置(如用户自定义设置、主题等)

浏览器行为跟踪(如跟踪分析用户行为等)
复制代码

由于HTTP协议是无状态的,即服务器不知道用户上一次作了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结账时,因为HTTP的无状态性,不经过额外的手段,服务器并不知道用户到底买了什么,因此Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器能够设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。cookie

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另外一个页面,浏览器会把Cookie发送给服务器,因而服务器知道他以前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结账时,服务器读取发送来的Cookie就好了。ide

Cookie另外一个典型的应用是当登陆一个网站时,网站每每会请求用户输入用户名和密码,而且用户能够勾选“下次自动登陆”。若是勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登陆了。这正是由于前一次登陆时,服务器发送了包含登陆凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登陆时,若是该Cookie还没有到期,浏览器会发送该Cookie,服务器验证凭据,因而没必要输入用户名和密码就让用户登陆了。/* 来源于维基百科*/性能

cookie的原理

第一次访问网站的时候,浏览器会向服务器发出请求,服务器收到请求后,会将cookie放到响应头中返回,在后面的每次请求中都会携带着cookie,服务器会识别cookie内容,了解到用户目前的行为状态,而且服务器也能够修改cookie的内容。

cookie的属性组成

cookie的拥有 Name,``Value, Domain, Path, Expires/Max-Age, Size, Http, Secure, Samesite

Name

顾名思义就是cookie的名字,不过name的名字不能相同,相同的name后面的会覆盖前面的。

Value

就是cookie的值,该值是会被URL编码的

Domain

就是cookie指向的域名,如前说述,网站每一个网页的cookie都必须指向同一个域名。

path

默认值path"/",路径也是路由,也就是它会根据后面的内容进行匹配绑定cookie,在同一个服务器上有目录以下:/image/,/image/11/,/image/22/,现设一个cookie1的path/image/,cookie2的path为/image/11/,那么/image/下的全部页面均可以访问到cookie1,而/image//image/22/的子页面不能访问cookie2。这是由于cookie能让其path路径下的页面访问。,

//为默认值时
www.baidu.com

wwww.baidu.com/image
//他会给image的子路径绑定cookie,如/image, /image/11/,/image/22/等等

复制代码

Expires/Max-Age

到期时间,cookie有效期默认为20分钟,不一样浏览器策略不一样,若是关闭浏览器后,这个cookie就会被删除,固然也能够在后端设置cookie的有效期,具体能够在MDN查看语法, Expires响应头包含日期/时间, 即在此时候以后,响应过时。Expires指定一个绝对的过时时间(GMT格式),这么作会致使至少2个问题1)客户端和服务器时间不一样步致使Expires的配置出现问题 2)很容易在配置后忘记具体的过时时间,致使过时来临出现浪涌现象(即突发性的出现网页性能降低,影响体验),因此如今已经不用了,开始用cache-contorl来作为到期时间和Max-Age搭配使用,具体能够在MDN上面了解。

Max-Age做为代替Expires的属性,指令指定从请求的时间开始,容许提取的响应被重用的最长时间(单位:秒)。 例如,“max-age=60”表示可在接下来的 60 秒缓存和重用响应。

secure

这个属性译为安全,http不只是无状态的,仍是不安全的协议,容易被劫持,打个比方,你在手机端浏览网页的时候,有没有中国移动图标跳出来过,闲言少叙,当这个属性设置为true时,此cookie只会在https和ssl等安全协议下传输

Samesite

SameSite-cookies是一种机制,用于定义cookie如何跨域发送。这是谷歌开发的一种安全机制,而且如今在最新版本(Chrome Dev 51.0.2704.4)中已经开始实行了。SameSite-cookies的目的是尝试阻止CSRF(Cross-site request forgery跨站请求伪造)以及XSSI(Cross Site Script Inclusion (XSSI) 跨站脚本包含)攻击。如今已经运用在了谷歌控制台。

SameSite 这个属性有两个可选值,分别是StrictLax 。其中Strict为严格模式,另外一个域发起的任何请求都不会携带该类型的 cookie,可以完美的阻止 CSRF 攻击,可是也可能带来了少量不便之处,例如经过一个导航网站的超连接打开另外一个域的网页会由于没有携带 cookie 而致使没有登陆等问题。但目前SameSite Cookie还处于实验阶段,并非全部浏览器都支持。 Same-Site Cookies 很是容易部署,只须要将你原来的设置 cookie 的地方

Set-Cookie: key=value; path=/

改成

Set-Cookie: key=value; path=/; SameSite

就能够啦

备注:跨站请求伪造(又被称为 CSRF或者XSRF),它源自一个域网站向另外一个域网站发起请求的简单功能。攻击者经过一些技术手段欺骗用户使用浏览器去访问一个本身曾经认证过的网站并执行一些敏感操做(如转帐)。

js能够在控制台直接读写cookie

结尾

暂时就写这么多,若有疏漏,欢迎补充。

相关文章
相关标签/搜索