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存在本地客户端硬盘中

cookie的作用

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

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

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

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

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

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

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

结尾

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

转载于:https://juejin.im/post/5cee00b86fb9a07ec07fa146

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值