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 来识别用户。

另一种解释:

  1. 用户端发来一个 HTTP 请求
  2. 服务端判断这是需要建立一个 session 才能解决呀,于是服务端创建一个 session 对象,然后把 session ID(SID) 通过响应传回客户端
  3. 客户端将 SID 存到 cookie 中,后续 HTTP 请求都会带上这个 SID 发送给服务端
  4. 然后服务端收到该客户端的 HTTP 请求都包含这个 SID ,服务端通过这个 SID 就能识别该用户以及该 session 了

上面第二种解释是为了强调:服务端创建了 session 对象!并且在整个 session 对话过程中可能会产生一些数据(比如:状态信息、用户行为轨迹等),这些数据都是存储在服务端的(可能在内存中,也可能在数据库中)!客户端只存 SID

下图中对比了 session 和 cookie 的工作流程:

 

 

 

 

完。

posted @ 2020-02-06 15:39  itwhite  阅读(393)  评论(0编辑  收藏  举报