JavaScript 复习之 Cookie

Cookie 是服务器保存在浏览器的一小段文本信息,每一个 Cookie 的大小通常不能超过4k。浏览器每次向服务器发起请求,就会自动附上这段信息。浏览器

Cookie 主要用来分辨两个请求是否来自同一个浏览器,以及用来保存一些状态信息。他的经常使用场合有如下:bash

  • 对话(session)管理:保存登录、购物车等须要记录的信息
  • 个性化:保存用户的偏好,好比网页的字体大小、背景色等到
  • 追踪:记录和分析用户行为

Cookie 包含如下信息:服务器

  • Cookie 的名字
  • Cookie 的值(真正的数据写在这里面)
  • 到期时间
  • 所属域名(默认是当前域名)
  • 生效的路径(默认是当前网址)

浏览器能够设置不接受 Cookie,也能够设置不向服务器发送 Cookie。window.navigator.cookieEnabled属性返回一个布尔值,表示浏览器是狗打开 Cookie 功能。cookie

// 浏览器是否打开 Cookie 功能
window.navigator.cookieEnabled // true
复制代码

document.cookie返回当前网页的Cookiesession

1、Cookie 和 HTTP 协议

Cookie 由 HTTP 协议生成,业主要提供 HTTP 协议使用dom

HTTP 回应:Cookie 的生成

服务器若是但愿在浏览器保存 Cookie,就要在 HTTP 回应的头部信息里面,放置一个 Set-Cookie 字段。字体

Set-Cookie:foo = bar
复制代码

若是服务器想改变一个早先设置的 Cookie,必须同时知足四个条件:Cookie 的keydomainpathsecure都匹配。加密

Http 请求:Cookie的发送

浏览器向服务器发送 HTTP 请求时,每一个请求都会带上相应的 Cookie。也就是说,把服务器早前保存在浏览器的这段信息,再发回服务器。这时要使用 HTTP 头信息的Cookie字段。spa

服务器收到浏览器发来的 Cookie 时,有两点是没法知道的。prototype

  • Cookie 的各类属性,好比什么时候过时。

  • 哪一个域名设置的 Cookie,究竟是一级域名设的,仍是某一个二级域名设的。

2、Cookie的属性

Expires, Max-Age

Expires属性指定一个具体的到期时间,到了指定时间之后,浏览器就再也不保留这个 Cookie。他的值是 UTC 格式,能够使用 Date.prototype.toUTCString()进行格式转换。

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

若是不设置该属性,或者设为null,Cookie 只在当前会话(session)有效,浏览器窗口一旦关闭,当前 Session 结束,该 Cookie 就会被删除。另外,浏览器根据本地时间,决定 Cookie 是否过时,因为本地时间是不精确的,因此没有办法保证 Cookie 必定会在服务器指定的时间过时。

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

若是同时指定了ExpiresMax-Age,那么Max-Age的值将优先生效。

Domain,Path

Domain属性指定浏览器发出 HTTP 请求时,哪些域名要附带这个 Cookie。

Path属性指定浏览器发出 HTTP 请求时,哪些路径要附带这个 Cookie。

Secure, HttpOnly

Secure属性指定浏览器只有在加密协议 HTTPS 下,才能将这个 Cookie 发送到服务器。另外一方面,若是当前协议是 HTTP,浏览器会自动忽略服务器发来的Secure属性。该属性只是一个开关,不须要指定值。若是通讯是 HTTPS 协议,该开关自动打开。

HttpOnly属性指定该 Cookie 没法经过 JavaScript 脚本拿到,主要是document.cookie属性、XMLHttpRequest对象和 Request API 都拿不到该属性。

相关文章
相关标签/搜索