聊一聊Session是用来干什么的

今天有个小白搞不懂什么是Session,可能对于很多人来讲对Session的认识还停留在面试的时候应付面试官的八股文中。今天借这个机会,我来装个逼。写下来我个人对于Session的理解。
在这里插入图片描述

先写下来百度百科对于Session的定义

为了满足实时远程监测系统的需求,服务器需要实时监测客户端的连接状态。为此利用ICE中间件的优点设计了一种基于面向对象ICE中间件自定义Session机制的解决方案。

首先我们知道,在很多情况下,我们常用的网络通信都是基于HTTP协议实现的,这个协议的通信是没有记忆能力的(装逼的说法是“无状态协议”),意思就是当你使用HTTP协议进行通信的话,每一次的请求都是独立的,这一次的通信跟上一次通信是没有联系的。

设想一下如果这个问题不加处理的话,就会出现下述场景:

大爷:你姓什么?
我:马。
大爷:叫什么呀?
我:冬梅
大爷:什么冬梅?
我:马冬梅
大爷:马什么梅?
我:马冬梅
大爷:马东什么?
我:404 Not Found。
在这里插入图片描述

这肯定是我们不能接受的,马冬梅希望大爷的几次请求之间可以建立关联。基于这个目的,马冬梅再去看大爷,都是带着饼干(Cookie)去的。
Cookie是一种在客户端设备上存储少量数据的方式,当我们把一些信息以cookie的方式保存之后,它在一个域名下是可以全局访问的,意思就是只要设置它的存储路径在域名www.zb.com下 ,那么当用户用浏览器访问时,我们就可以从这个域名的任意页面读取cookie中的信息。

使用Cookie有很多使用起来不方便的地方:比如不能存储大量数据(最大限制4kb),一个浏览器存储cookie的数量上限是300个左右,一个网站在浏览器上cookie上限是30个,还有cookie中不能直接存储中文。最最最重要的是,有很多客户需求很操蛋,他们会把你的Cookie直接禁掉(因为cookie直接把信息存储在客户端上,很不安全)

这个时候,马冬梅意识到,靠大爷不如靠自己。还是将信息保存在服务器上靠谱一点。
就这样Session出现了,Session会在每一次开启会话的时候为用户分配一个SessionID,这个ID会发送给客户端(客户端和服务器都会保存这个ID),并且之后每一次客户端对服务器发出请求的时候都会带上这个SessionID用来标记身份。注意!Session存储用户的信息是临时的,一般情况下用户把浏览器关闭的时候,这个用户的Session就会销毁。

用来获取Session的方式不同的语言是不一样的,但是思路一般都是差不多,就是Session跟着请求走的,获取Session自然也是通过Request获取。

为了防止很多分布式大神来嘲笑我我在这里先说明一下

这个文章是拿来教育小白的,现在使用Session有很多的问题
在这里插入图片描述
Session做请求有一个很明显的问题,上文中说了,SessionID在服务器和客户端都会保存一份,那么问题来了:假如Web服务器做了负载均衡,这时候马冬梅已经不是那个马冬梅了,但是你大爷依旧是你大爷。
可能上一个请求发到服务器A,下一个操作发到服务器B去了,这个时候Session就会丢失。
还有的时候,基于Session的相关验证,很有可能被伪造身份攻击(比如“跨站域请求伪造”),所以相比较而言基于Token的验证原理还是比较稳妥的。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值