- HTTP 是无状态的协议(对于事务处理没有记忆能力)
当客户端和服务端会话完成时,由于每个请求都是完全独立的,服务端不会保存任何会话信息,因此服务端也无法确认当前访问者的身份信息,就无法知晓上一次的请求发送者和这一次的发送者是否相同。
所以服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。
- 由服务器生成,发送给浏览器,浏览器将cookie以key-value形式保存到某个目录下的文本文件内,当再次请求同一网站时会把该cookie发送给服务器
- cookie 存储在客户端:是客户端访问某个Web时,保存在客户端(本地终端)的数据信息
- cookie 是不可跨域的: 每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)。
- cookie的重要属性
- name=value
键值对,设置 Cookie 的名称及相对应的值,都必须是字符串类型、值为 Unicode 字符,需要为字符编码、值为二进制数据,需要使用 BASE64 编码。 - expires
设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效 - path
定义了Web站点上可以访问该Cookie的目录,默认是 ‘/’。如果设置为 /abc,则只有 /abc 下的路由可以访问到该 cookie,如:/abc/read。 - domain
指定 cookie 所属域名,默认是当前域名 - secure
该 cookie 是否仅被使用安全协议传输。安全协议有 HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效。 - maxAge
cookie 失效的时间,单位秒。如果为整数,则该 cookie 在 maxAge 秒后失效。如果为负数,该 cookie 为临时 cookie ,关闭浏览器即失效,浏览器也不会以任何形式保存该 cookie 。如果为 0,表示删除该 cookie 。默认为 -1。- 比 expires 好用。 - httpOnly
如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还是能通过 Application 中手动修改 cookie,所以只是在一定程度上可以防止 XSS 攻击,不是绝对的安全