需要解决的问题:HTTP是无状态的协议。当服务器无法识别用户的状态。服务器无法知道两个请求是否来自于同一个浏览器。
应用场景:购物车。
机制:Session。开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”。
原理:把用户的数据记录在session中,每个session在服务端都有一个唯一标识id。
识别:用Cookie技术来实现session。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的。第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,这样服务器就能识别用户了。
Cookie最常用于记录用户的账户信息和操作记录。所以泄露cookie 会带来个人帐号与隐私泄露的风险, 这就是为什么你搜索一个关键字,会在其他网站上看到推荐广告的原因。
如果禁用cookie怎么办呢?可以使用URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
存储:在大型的网站,一般会有专门的Session服务器集群。session常见存储在缓存中,cookie存储到客户端,一般是浏览器的本地文件中。
HTTP Headers:Web 服务器通过发送一个称为 Set-Cookie 的 HTTP 消息头来创建一个 cookie。格式如下(中括号中的部分是可选的):
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
cookie 的值被存储在名为 Cookie 的 HTTP 消息头中。如果请求中包含多个 cookie,它们将会被分号和空格分开,例如:
Cookie: value1; value2; name1=value1