文档章节

cookie

五公里
 五公里
发布于 09/22 10:21
字数 2648
阅读 56
收藏 0

cookie: n. 饼干;小甜点

为什么会引入Cookie(在客户端保持http状态)

因为http协议是一种无状态协议,web服务器本身不能识别出哪些请求是同一个服务器发送的,浏览器的每一次请求都是独立的。因此引入cookie来唯一标识一个用户,同时记录该用户的状态。

Cookie介绍

Cookie是浏览器在访问WEB服务器的某个资源时,由WEB服务器在HTTP响应头附带传送给浏览器的一个小文本文件。
  1. 一旦WEB浏览器保存了某个cookie,那么它在以后每次访问该服务器时,都会带在HTTP请求头将这个cookie回传给web服务器。
  2. 一个cookie只能标识一种信息,它至少含有一个标识该信息的名称(Name)和设置值。
  3. 一个WEB站点可以给一个WEB服务器发送多个cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie
  4. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

Cookie底层原理

WEB服务器通过HTTP响应信息中增加Set-cookie字段将cookie信息发送给浏览器,浏览器则通过在HTTP请求中增加cookie请求字段将cookie回传给Web服务器。服务器根据cookie辨别用户,也可以修改cookie内容。
[存储cookie是浏览器提供的功能。cookie 其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个 cookie 文件夹来存放各个域下设置的cookie。
当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request header中的cookie字段中。这些是浏览器自动帮我们做的,而且每一次http请求浏览器都会自动帮我们做。这个特点很重要,因为这关系到“什么样的数据适合存储在cookie中”。
存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这设置自动处理就大大免去了重复添加操作。所以对于那设置“每次请求都要携带的信息(最典型的就是身份认证信息)”就特别适合放在cookie中,其他类型的数据就不适合了。当然cookie标准还是做了一些限制的:每个域名下的cookie 的大小最大为4KB,每个域名下的cookie数量最多为20个(但很多浏览器厂商在具体实现时支持大于20个)]

浏览器查看cookie值:application--->cookie

cookie其他特点

cookie不可跨域:就是不能在不同的域名下用,每个cookie都会绑定单一的域名

Cookie的特点

  • cookie 主要用于标识用户身份,而 Web Storage 主要用于浏览器端存储数据;
  • 一般情况下浏览器端不会修改 cookie,但会频繁操作 Web Storage(sessionStorage,localStorage)
  • cookie 最大允许存储 4KB,而 Web Storage 每一个源支持 5MB(视浏览器而定,最小保守是 5MB);
  • cookie 每次都会包含在 http 请求中,而 Web Storage 由脚本控制选择性提交;
  • cookie 在设置的有效期内都有效,sessionStorage 在当前页面关闭前有效,localStorage 长期有效,直到 用户删除它或通过脚本删除它
  • sessionStorage 不能共享,localStorage 在同源文档之间共享, cookie 在同源且符合 path 规则的文档之间共享

Cookie的优点

  • 通过加密和安全传输技术(SSL),减少cookie被破解的可能
  • 不需要服务器资源 直接存储在本地

Cookie 的缺点

  • 每个域的cookie总数是有限的,不同浏览器之间各有不同。
Firefox 限制每个域最多 50 个 cookie。
Safari 和 Chrome 对于每个域的 cookie 数量限制没有硬性规定 Safari 和 Chrome 对于每个域的 cookie 数量限制没有硬性规定
  • cookie大小的限制
大多数浏览器4096B的长度限制,为了兼容多种浏览器,最好将长度限制在4095B以内.每个domain最多只能有20条cookie。
  • 由于所有的 cookie 都会由浏览器作为请求头发送,所以在 cookie 中存储大量信息会影响到特定域的 请求性能。
cookie 信息越大,完成对服务器请求的时间也就越长。尽管浏览器对 cookie 进行了大小限制, 不过最好还是尽可能在 cookie 中少存储信息,以避免影响性能

Cookie的参数

name: cookie的名字 [必须]
value: cookie值 [必须](由于cookie规定是名称/值是不允许包含分号,逗号,空格的,所以为了不给用户到来麻烦,考虑服务器的兼容性,任何存储cookie的数据都应该被编码。)value: cookie值 [必须](由于cookie规定是名称/值是不允许包含分号,逗号,空格的,所以为了不给用户到来麻烦,考虑服务器的兼容性,任何存储cookie的数据都应该被编码。)

domain: cookie绑定的域名。[可选,如果没有设置,自动绑定到执行语句的当前域;注:同一个域名下的二级域名也是不可以交换使用cookie的,比如www.baidu.com和image.baidu.com也是不可以公用的]

出于安全考虑,网站不能访问由其他域所创建的cookie【

https://blog.csdn.net/supermao1013/article/details/83827310

  1. 在setcookie中省略domain参数,那么domain默认为当前域名
  2. domain参数可以设置父域名,如果设置cookie在子域名;父级访问不到cookie
  3. 如果cookie设置为顶级域名,则全部的域名,包括顶级域名、二级域名、三级域名等,都可以共享该cookie
  4. 如果cookie设置为当前域名,则当前域名及其下面的所有子域名可以共享该cookie
  5. 二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。例如:要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值 】
域名区分

path: 服务器路径 ,当路径设置为/blog时,会给/blog路径下绑定cookie(可选)

//默认路径
www.baidu.com
//blog路径
www.baidu.com/blog
Expire/Max-Age: Cookie有效期(可选)
Size:cookie大小 (可选)
HttpOnly:设置为true,就不能通过js脚本来获取cookie的值,能防止xss攻击(可选)
[试想:如果任何 cookie 都能被客户端通过document.cookie获取会发生什么可怕的事情。当我们的网页遭受了 XSS 攻击,有一段恶意的script脚本插到了网页中。这段script脚本做的事情是:通过document.cookie读取了用户身份验证相关的 cookie,并将这些 cookie 发送到了攻击者的服务器。攻击者轻而易举就拿到了用户身份验证信息,于是就可以摇摇大摆地冒充此用户访问你的服务器了(因为攻击者有合法的用户身份验证信息,所以会通过你服务器的验证)。]
secure: 规定是否通过安全的 HTTPS 连接来传输 cookie(可选)

客户端操作cookie值(document.cookie可以对cookie进行读写)

客户端可以设置cookie 的下列选项:expires、domain、path、secure(有条件:只有在https协议的网页中,客户端设置secure类型的 cookie 才能成功),但无法设置HttpOnly选项。
//读取浏览器中的cookie
console.log(document.cookie);
//写入cookie
document.cookie='myname=laihuamin;path=/;domain=.baidu.com';

服务端设置cookie值

不管你是请求一个资源文件(如 html/js/css/图片),还是发送一个ajax请求,服务端都会返回response。而response header中有一项叫set-cookie,是服务端专门用来设置cookie的;
服务端返回的response header中有5个set-cookie字段,每个字段对应一个cookie(注意不能将多个cookie放在一个set-cookie字段中),set-cookie字段的值就是普通的字符串,每个cookie还设置了相关属性选项。
一个set-Cookie字段只能设置一个cookie,当你要想设置多个 cookie,需要添加同样多的set-Cookie字段。
服务端可以设置cookie 的所有选项:expires、domain、path、secure、HttpOnly

cookie的应用

  1. 购物车
  2. 自动登录(登录账号时自动登录)
  3. 广告(记录你最近浏览过的,买过的类似东西,都是通过cookie记录的)
  4. 记住登录状态
  5. 单点登陆 ( Single Sign On, SSO),是目前比较流行的企业业务整合的解决方案之一.
简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。
  1. 显示上次浏览过的商品
通过 Cookie 帮助商家向之前访问过其网站、购买过其产品或使用过其应用的您投放广告,并根据您的这些活动向他们推荐产品和服务。此外,我们还可以通过 Cookie 限制向您投放广告的次数,以便您不会重复看到同一条广告。 通过 Cookie 帮助商家向之前访问过其网站、购买过其产品或使用过其应用的您投放广告,并根据您的这些活动向他们推荐产品和服务。此外,我们还可以通过 Cookie 限制向您投放广告的次数,以便您不会重复看到同一条广告。

参考文章

https://bubkoo.com/2014/04/21/http-cookies-explained/
https://zhuanlan.zhihu.com/p/25834961
https://segmentfault.com/a/1190000004556040

© 著作权归作者所有

五公里
粉丝 1
博文 43
码字总数 36322
作品 0
昆明
私信 提问
jquery.cookie用法详细解析

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启...

huoyoung
2016/06/23
194
0
jQuery插件 -- Cookie插件jquery.cookie.js

jQuery插件 -- Cookie插件jquery.cookie.js(转) Cookie是网站设计者放置在客户端的小文本文件。Cookie能为用户提供很多的使得,例如购物网站存储用户曾经浏览过的产品列表,或者门户网站记...

james_laughing
2016/06/12
37
0
cookie介绍一个简单的效果传值

首先来一个简单的介绍 一个轻量级的cookie 插件,可以读取、写入、删除 cookie。 jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件。 使用方法 1.新添...

骚胖
2017/11/17
0
0
jquery.cookie使用方法

一个轻量级的cookie插件,可以读取、写入、删除cookie。 jquery.cookie.js的配置 首先包含jQuery的库文件,在后面包含jquery.cookie.js的库文件。 <script type="text/javascript" src="js/j......

薛鹏飞
2012/09/14
142
0
javascript cookie

什么是 Cookie   “cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。” - w3...

赵小宾
2014/04/02
121
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部