当前位置: 首页 > 原理解释

session的实现原理-Session 实现原理

抠出 session 的核心,实际上就是得把那个“状态”给锁住,别让它随风飘散。想象你叫张总,去跟客户谈合同,你得把客户的偏好、刚刚踩过的坑、就连你手机里都记得的某个小细节,都塞进电脑里,不然下次见面还得从头聊。浏览器就是个浏览器,它负责在内存里开个小小的“对话框”,专门用来存这些临时信息,这不就叫 Session 吗? 浏览器启动的时候,往往只带着“我”这个身份,至于“我是哪位”、“我想聊啥”、“我经历了啥”这些具体事儿,全得靠服务器来记。服务器是个超级大仓库,它有个庞大的表格,表格里每一行就是一个请求,每一列就是各种状态数据。
每次用户上传图片,服务器就得把这张图存进仓库,顺便把“我是哪位”也记一笔,与此同时也把“我刚刚存了啥图、存了几张”记一笔。
这时候,存的这张表就叫 Session。 你看URL,数据结构有点意思。平时你访问一个网站,URL 里只有几个字母数字,比如 `example.com`。但要是你登录了,URL 里多了 `?username=admin&message=hello` 这堆参数。
这参数就是 Session 的数据,它们被编码在 URL 后面,跟着你走。你刷新页面,URL 还在,参数还在,你看到了;你重新输入密码,URL 变了,参数就又没了,你看不到了。
这就是 Session 最直接的体现——所有数据都藏在这串字符里,哪位访问都看得见。 不过,这 URL 参数忒占地方了,并且复制粘贴费事。Session 实际上是个更优雅的解决方案,它把数据从“显性的 URL"移到了“隐性的内存”。当你访问一个动态页面,比如获取当前用户信息,浏览器会先在内核里(内存)开个一个小窗口,专门存刚刚服务器发给你的那些参数。
这个窗口就叫 Session 存区。 这就好比你去银行办业务,你手里拿的不仅是身份证(URL),还有一张专门打印的“业务办理清单”(Session 数据)。
这张清单里记着你上次办的业务结局。你去柜台找柜员(服务器),柜员只需求翻翻你的清单,并不必要重新问一遍,清单上的信息全在。 要是用户点了个“提交”,服务器在处理完请求后,就会及时把刚刚处理的数据,写进那张“业务办理清单”,连同“我是哪位”这样的身份信息一起。
这时候,那张清单就活过来了,有了内容。服务器把这个 Session 记得,下次这个用户再回来,只要拿着这个 Session 去柜台,柜台直接给你办完剩下的事,不用问重复的难题。 那这个 Session 究竟如何存有呢?它主要分两种活法:一种是永久挂在那里的,就像你入职后签了劳动合同,公司得记得你的名字,这一般被叫成 Session 存(比如 Redis 存了永久数据);另一种是随时消亡的,就像你办完事立马走人,公司只记得你刚刚办了啥,这次你走了,下次你来还得重新录入。 还有一种更有趣的玩法,是“懒加载”和“懒绑定”。浏览器启动时,它知道自己是张总,但不知道具体要办啥。
这时候,浏览器会拿着“我是哪位”这个 Session 标记,去跟服务器说:“嘿,服务器,下次我请求这个接口的时候,带上这个 Session 前端信息。”服务器收到请求后,才会去那个“业务办理清单”里翻个底,把刚刚存的数据拉出来,拼成整个的上下文发给浏览器。 浏览器拿到数据后,会做个“剪贴板”操作。它把刚刚从服务器拿来的数据,暂时存进自己的“剪贴板”里,持续往前走。当你跳转要么加载完那个接口后,浏览器再根据刚刚的“剪贴板”内容,把那些数据真正塞进内存,这就叫 Session 绑定。 整个过程就像你吃到了个炸鸡,盯着桌子上的菜单(服务器)说:“我想吃这个炸鸡。”服务器告诉你:“这里有一串代码,写着你的订单号。”你接过纸条(Session),转身去买其他东西。等买完事了,你拿着纸条回来,直接把纸条交给老板(服务器),老板说:“好啊,这个炸鸡,我给你记上了你的名字和刚刚点的花样。” CRUD 过程中的 Session 流转,实际上就是一条好办的链路。当你创建(Create)一个新订单,服务器处理完后,会把“订单记录”和“订单号”塞进 Session,发给浏览器。浏览器收到后,把它存进自己的内存“剪贴板”。当你读取(Read)这个订单时,浏览器直接读取内存里的“剪贴板”,服务器看到“订单号”和“订单内容”,便直接回给你。 有些场景下,Session 就连能动态生成。
比如你提交了表单,服务器处理完后,拍板生成一个唯一的 ID 存进去。下次你来,服务器看到 ID,就知道这是你之前提交的那个表单,直接给你结局。
这就是 Session ID 的功能,它是那个独一无二的“身份证”。 有时候,浏览器会自动把 Session ID 生成。大量网站启动时,会随机生成一串字符,比如 `123456789`,然后把这个数字存到服务器,要么反过来,服务器生成一个数字,存到浏览器里。
这就是 Session ID 的由来。 总结一下,Session 的本质就是让服务器知道你是哪位,还有你刚刚干了啥。它通过 URL 参数或内存中的 Session 存区,把刚刚交互的数据“贴”在浏览器回的响应给前端。前端拿到这些数据后,再根据这些数据去执行后续的逻辑,实现整个的闭环。它让每一次交互都显得有迹可循,也让服务器能精准地记住每个用户的状态。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站