zoukankan      html  css  js  c++  java
  • Session执行机制与原理

    Session执行机制与原理

    作者:Stanley 罗昊

    转载请注明出处和署名,谢谢!

    什么是Session

    首先了解一下Session的中文意思:一次会话,什么是一次会话呢?我举个例子:就我们现在上网,打开浏览器浏览网站当时开始到你关闭浏览器,就称之为一次会话

    也可以这么理解,当你在网上购物,浏览、选择商品、付款、退出,这个就可以理解成一次会话;

    一次开始到一次结束

    快速理解Session的执行机制

    比如我现在客户端向服务端发送一个请求,这个时候服务端就用会一个Session来跟你一一对应,下面我画一张图来解释:

    当张三用游览器向服务器发送一个请求的时候,服务器会给它创建并分配一个Session,同时,李四也访问服务器,这个时候服务器同时也会给李四创建并分配一个Session,两个人一个一个相互独立互不干扰。

    分配给你的Session就是用来保存信息的,比如这个时候又来一个王五,王五给服务端发一个请求,这个时候我服务端又产生了一个Session用于保存王五的信息。

    Session机制详解

    客户端第一次请求服务端时,服务端会产生一个Session对象(用于保存该客户信息);

    并且每个Session对象都会有一个唯一的SessionID(用于区分其他Session);

    服务端又会产生一个Cookie,并且该Cookie的name 就是写死的 name = JSESSIONID它的value就是刚才Session的ID,valie = 服务端SessionID的值

    然后服务端会在响应客户端的同时,将该Cookie发送给客户端,至此客户端就有了一个Cookie(JSESSIONID),这个JSESSIONID的值就是刚才SessionID的值;

    因此,客户端的Cookie就可以和服务器的Session一一对应起来了(【客户端】JSESSIONID =【服务端】 SessionID);

    这样就可以保证每个人都拥有一个唯一的Session,来保存用户的信息。

    JSESSIONID详解

    那么,请求是如何相互对应的呢?这里我举个例子,当张三第一次请求服务端时,它就会产生一个Session对象,Session对象他会自带了一个SessionID,也就是Session产生的同时会带一个SessionID

    这个时候SessionID会把SessionID复制了一份给了JSESSIONID,也就说,SessionID跟JSESSIONID的值是一模一样的,这个时候它就会把JSESSIONID放到Cookie里面

    也就是我第一次请求时,会产生一个Session,并且Session会自带一个SessionID,假设这个SessionID的值是1,这个时候SessionID 1 这个值又赋给了JSESSIONID,这时JSESSIONID的值也是1了,然后我服务端做出响应,上次我也说过,当我们响应的同时会将Cookie给发过去

    Cookie是由服务端产生,所以在响应的时候发给客户端,这时,这个Cookie里面就包含我存的这个值1;

    这个时候,我客户端有一个1,我服务端也有一个1,这个时候不就一一对应起来了吗,所以就不会乱,也就说我服务端的SessionID的1与客户端的JSESSIONID的1一一对应用于区分客户

    也就说,我客户端与服务端是通过Session与Cookie对应起来的,Cookie里面的JSESSIONID和Session里面的Sessionid两个相对应。如果还不理解请看我下发画的图:

    客户端的JSESSIONID与服务端的SessionID一一对应。

    第二次请求

    上面我一直在说第一次请求,那如果不是第一次呢?如果是第二次或者更多次呢

    第一次请求的时候给你一个Session对象,那我第二次呢?还需要给吗?当然不需要了

    我第一次已经给你过Session了所以我第二次请求时,就不需要给你Session了,直接找你这个Session就完了;

    怎么找?就是根据你的JSESSIONID(客户端)和SessionID(服务端)进行匹配如果匹配的时候发现客户端JSESSIONID和在服务端存在的SessionID一模一样,就可以说明这个人之前登录成功过或曾经存在过

    因此我们上淘宝上京东我们就会发现,第一次登录成功后第二次就无需登录,一直保持在线状态

    当我们第一次访问京东时我登录了,登录完之后它马上就给我一个Session,里面放用户名密码,因为创建的同时会有一个SessionID,假设这个SessionID的值是4,然后把这个4放到Cookie里面再发给客户端,客户端有个Cookie,我JSESSIONID是4,两者对应起来后我就不需要再进行登录操作了。

    Session的重要核心机制

    1.Session存储在服务端

    2.Session是在同一个用户(客户)请求是共享的【意思就是你第一次开柜子匹配失败发现你是新用户就,给你分配了一把钥匙,当你第二次去开的时候就无需再分配钥匙,今天两个小时之内你不停的去开柜子都不需要再分配钥匙,所以你的请求已经被共享了,只要你有钥匙而且钥匙的上的编号与柜子编号相同,你就可以无限的去开柜子

    3.实现机制:在第一次客户请求时 产生一个Sessionid并赋值给Cookie的JSESSIONID,然后发给客户端,最终通过Session的Sessionid和我们Cookie的JSESSIONID实现一个一一对应关系。

    今日感悟:

    头等舱可以优先登机,银行VIP可以不用排队,

    演唱会最贵的票同时位置也是最好的,

    所以,

    世界从不平等,

    你有多努力,你就有多特殊

    作者:罗昊 感谢各位阅读学习, 如果有疑问或纠错请在评论区留言与我交流,再次感谢各位读者的支持
  • 相关阅读:
    ubuntu安装openssh-server 报依赖错误的解决过程
    用 Scikit-Learn 和 Pandas 学习线性回归
    python 10分钟入门pandas
    (转)梯度下降法及其Python实现
    pandas处理日期时间,按照时间筛选
    谁动了我的特征?——sklearn特征转换行为全记录
    使用sklearn做单机特征工程
    罗技鼠标黑科技
    怎样给 VS 更换皮肤
    SQLSERVER存储过程基本语法
  • 原文地址:https://www.cnblogs.com/StanleyBlogs/p/10394088.html
Copyright © 2011-2022 走看看