[HTTP 学习笔记]Cookie
Cookie
作用
Cookie 是一段由服务器通过在请求或响应报文发送给客户端的特殊信息,客户端会记录该信息,当下次发送请求时会在请求头中附带该信息,由服务器进行识别。
Cookie 通常有以下几种作用:
会话状态管理(如用户登录状态、购物车)
个性化设置(如用户自定义设置)
浏览器行为跟踪(如跟踪分析用户行为)
创建Cookie
- 服务器使用Set-Cookie响应头,告知客户端应该保存该信息
Set-Cookie: <cookie名称>=<cookie值>
栗子:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: sid=1342077140226724
- 客户端发起新请求时会将以前保存过的Cookie通过请求头发送给服务器
GET / HTTP/1.1
Cookie: sid=1342077140226724
期限
-
Session Cookie
通常,当Cookie未做任何指定期限时,浏览器会将Cookie信息保存在内存中,浏览器关闭后便自动删除,比如我们登录一些网站时不勾选“自动登录”选项时,我们关闭浏览器登录状态就自动删除了。需要注意的是,该状态由浏览器控制,因此部分浏览器也会提供关闭浏览器不清理cookie的功能。 -
Permanent Cookie
通过指定过期时间(Expires)或有效期(Max-Age),可以为浏览器指定一个过期时间,此时Cookie便储存在硬盘上,而不是储存于内存。
Set-Cookie: uuid=123456; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
//
作用域
Cookie作用域指需要发送的URL集合,它由Domain和Path指令定义。
Domain表示Cookie所在的域。如果没有指定,默认为当前的文档地址上的主机名(但是不包含子域名)。如果指定了Domain,则一般包含子域名。
如果设置了Domain=test.com,则Cookie包含在子域名中(如user.test.com或login.test.com)。
Path指令表明需要发送Cookie的URL路径。字符%x2F (即"/")用做文件夹分隔符,子文件夹也会被匹配到。
如设置Path=/docs,则下面这些地址都将匹配到:
"/docs",
"/docs/Web/",
"/docs/Web/HTTP"
JavaScript访问Cookie
可以通过document.cookie
创建新的Cookie,或者通过该属性访问未指定的HttpOnly标志的Cookie。
document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"
Session
对于Cookie来说,通过HTTP协议传输的信息均是明文传输,任何人都可以截获、篡改HTTP请求。因此客户端传来的信息是不可靠的,那么有什么办法来解决这个问题呢?
数据传输时,服务器与客户端之间不使用明文传输,而是传输加密后的密文,当服务器接收到密文后将密文解析,如果信息正确再通过解析后的密文找到对应数据返回给客户端。
这个过程我们成为会话(session),即客户端与服务器之间一对一的交互。
参考:
HTTP cookies