• 浅谈session、cookie


    关于session和cookie的概念在社区已经有很多文章阐述了,有很多写得很好,也有很多写得很模糊的地方。
    session在面试题中也是常客,在应付面试的时候我搜了一些相关文章尝试理解。但是效果却不是很好。

    纸上得来终觉浅,绝知此事要躬行。

    最近从0手撕服务端的时候开始接触session的实践。  
    本着丰富社区,尽量提供高质量的原则,我想分享一下我在实践session过程中对session的理解。
    希望小白看到这篇文章能够不产生误解,不误人子弟就是好事了。

    关于session、cookie产生的背景和作用我就不概述了。这里着重讲一下我对session整个过程的理解。  
    从第一步开始:  
    客户端先发起请求到服务器,当我第一次调用登陆接口时,服务器针对这次请求产生一个session。  
    session本质是一个对象。
    目前的session对象会有一个唯一的sessionId属性,和过期时间。

    当用户名、密码校验通过时,session会将用户id等信息存入session对象,最终保存到服务器中。
    然后在返回http请求时,将浏览器对应网址和端口cookie添加一个 假设key是‘X-Session-Id’,value为编码过后的sessionId。可以在开发者工具里面的Application里面看到,如下图所示:
    ![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/605b4b04bfe0472a8922265f60de871d~tplv-k3u1fbpfcp-watermark.image)
    假设服务器存储session为mysql,所存的数据结构大概如下:
    ![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6930812c1af94d838ff2d588ad0040c8~tplv-k3u1fbpfcp-watermark.image)
    综上所述。现在我们已经完成了一次登陆操作,且创建了一个session保存到服务器。并且设置好了浏览器的cookie。下次浏览器发送请求的时候,会将cookie的信息放入请求头中。  服务器收到带有cookie的请求头之后解析cookie,可以得到sessionId。  

    此时对比sessionId是否记录在数据库中,如果不存在则报错。
    如果存在,则将根据数据库存储的sessionId对应的userId来识别该请求是哪个用户发送的。

    以上就是session鉴权的全过程。


    这里挑出几个我觉得介绍得比较好的文章:  
    这篇文章讲得很好理解:
    [彻底理解session、cookie、token](https://zhuanlan.zhihu.com/p/63061864)  
    这篇文章讲得比较细:
    [session、cookie机制详解](https://blog.csdn.net/fangaoxin/article/details/6952954)

  • 相关阅读:
    艾奇KTV电子相册制作软件2023最新免费版下载
    Docker部署Portainer图形化管理工具
    【Linux初阶】Linux调试器-gdb使用 | gdb的 l/b/info/d/r/n/s/bt/finish/p/(un)display/q
    【C++杂货铺】继承由浅入深详细总结
    python基础学习(7)
    1024共码未来(一览中华风华,API First)
    【docker专栏5】详解docker镜像管理命令
    移位运算符常用用法
    【计算机网络】多路复用的三种方案
    Python and和or的优先级实例比较
  • 原文地址:https://blog.csdn.net/q275757160/article/details/127800939