Cookie 是服务器保存在浏览器的一小段文本信息,每一个 Cookie 的大小通常不能超过4k。浏览器每次向服务器发起请求,就会自动附上这段信息。浏览器
Cookie 主要用来分辨两个请求是否来自同一个浏览器,以及用来保存一些状态信息。他的经常使用场合有如下:bash
Cookie 包含如下信息:服务器
浏览器能够设置不接受 Cookie,也能够设置不向服务器发送 Cookie。window.navigator.cookieEnabled
属性返回一个布尔值,表示浏览器是狗打开 Cookie 功能。cookie
// 浏览器是否打开 Cookie 功能
window.navigator.cookieEnabled // true
复制代码
document.cookie
返回当前网页的Cookiesession
Cookie 由 HTTP 协议生成,业主要提供 HTTP 协议使用dom
服务器若是但愿在浏览器保存 Cookie,就要在 HTTP 回应的头部信息里面,放置一个 Set-Cookie
字段。字体
Set-Cookie:foo = bar
复制代码
若是服务器想改变一个早先设置的 Cookie,必须同时知足四个条件:Cookie 的key
,domain
,path
,secure
都匹配。加密
浏览器向服务器发送 HTTP 请求时,每一个请求都会带上相应的 Cookie。也就是说,把服务器早前保存在浏览器的这段信息,再发回服务器。这时要使用 HTTP 头信息的Cookie字段。spa
服务器收到浏览器发来的 Cookie 时,有两点是没法知道的。prototype
Cookie 的各类属性,好比什么时候过时。
哪一个域名设置的 Cookie,究竟是一级域名设的,仍是某一个二级域名设的。
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。
若是同时指定了Expires
和Max-Age
,那么Max-Age的值将优先生效。
Domain
属性指定浏览器发出 HTTP 请求时,哪些域名要附带这个 Cookie。
Path
属性指定浏览器发出 HTTP 请求时,哪些路径要附带这个 Cookie。
Secure
属性指定浏览器只有在加密协议 HTTPS 下,才能将这个 Cookie 发送到服务器。另外一方面,若是当前协议是 HTTP,浏览器会自动忽略服务器发来的Secure属性。该属性只是一个开关,不须要指定值。若是通讯是 HTTPS 协议,该开关自动打开。
HttpOnly
属性指定该 Cookie 没法经过 JavaScript 脚本拿到,主要是document.cookie
属性、XMLHttpRequest
对象和 Request API 都拿不到该属性。