浅谈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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Manggoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值