举例,你在京东上购物,此时你并没有登录,但是你选了一些物品并添加到购物车。
那么当你添加某件商品到购物车的时候,你这个时候一定会往京东的服务器发送 http 请求。比方说,你的请求报文里有一个 json 对象
{
"book":"1",
"ball":"1",
"bike":"1"
}
当服务器收到这个 http 请求的时候,它建立了一个 session,并反序列化请求中的 json,存储到了 session 里面,并为这个 session 起了一个 id,比如说是 sid10001
服务器会 respond 客户端,并且在应答报文的 header 里标注
set-cookie = connect.sid
//sid = 'sid10001'
客户端接收到 connect.sid 以后,它会把这个 sid 记录到本地的 cookie 里面。注意,cookie 的存储位置是在硬盘而不是内存。
用户此时关闭浏览器并再次打开,访问 jd.com,此时它会把 cookie 中的 connect.sid 拿出来并放在请求报文的 header 里面。
服务器接收到请求报文 header 里面的 session id,得到值 sid10001, 再与服务器中的 session 比对,直至找到 sid10001 对应的 session。取出数据
{
"book":"1",
"ball":"1",
"bike":"1"
}
放在应答报文的 body 中,返回给客户端。
此时,客户端浏览器上,用户依然可以看到购物车里面添加的这三件产品。