JavaScript快速入门笔记(14):session
本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12268907.html。
简介
注:本文描述的 session 特指 HTTP 通信中的 session ,这本不属于 JavaScript 脚本的范畴,但它常被拿来与 cookie 对比,本人的上一篇笔记刚好整理了 cookie 的内容,因此本文再整理下 session 的内容,方便对比和理解。
考虑这样一个场景:当用户进入某个站点完成一系列性操作时(比如用户进入某个购物网站,选择商品并加入购物车,然后去购物车下单),每一个操作可能都需要向服务端发送一条或多条 HTTP 请求,由于 HTTP 协议是无状态协议,服务端是如何知道这些操作(或请求)是来自同一个用户的呢?这个问题通常都是用 session 机制来解决的。
Session 的工作机制是:为每个用户创建一个唯一的ID(我们这里称为SID吧),然后让存入用户端的 cookie 中,这样用户端的每一次 HTTP 请求(报文头部中)都会带上这个 SID,服务端通过这个 SID 来识别用户。
另一种解释:
- 用户端发来一个 HTTP 请求
- 服务端判断这是需要建立一个 session 才能解决呀,于是服务端创建一个 session 对象,然后把 session ID(SID) 通过响应传回客户端
- 客户端将 SID 存到 cookie 中,后续 HTTP 请求都会带上这个 SID 发送给服务端
- 然后服务端收到该客户端的 HTTP 请求都包含这个 SID ,服务端通过这个 SID 就能识别该用户以及该 session 了
上面第二种解释是为了强调:服务端创建了 session 对象!并且在整个 session 对话过程中可能会产生一些数据(比如:状态信息、用户行为轨迹等),这些数据都是存储在服务端的(可能在内存中,也可能在数据库中)!客户端只存 SID!
下图中对比了 session 和 cookie 的工作流程:
完。