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可以不用排队,

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

所以,

世界从不平等,

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

Session执行机制与原理的更多相关文章

  1. jsp中session执行机制

  2. Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)

    一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...

  3. cookie机制和session机制的原理和区别[转]

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

  4. 再谈mysql锁机制及原理—锁的诠释

    加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...

  5. flask 源码专题(六):session处理机制

    前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...

  6. logrotate机制与原理[转载]

    http://blog.lightxue.com/how-logrotate-works/ 日志实在是太有用了,它记录了程序运行时各种信息.通过日志可以分析用户行为,记录运行轨迹,查找程序问题.可惜磁 ...

  7. Android(java)学习笔记202:Handler消息机制的原理和实现

     联合学习 Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系   1. 首先我们通过一个实例案例来引出一个异常: (1)布局文件activity_m ...

  8. Java序列化的机制和原理

    Java序列化的机制和原理 本文讲解了Java序列化的机制和原理.从文中你可以了解如何序列化一个对象,什么时候需要序列化以及Java序列化的算法. 有关Java对象的序列化和反序列化也算是Java基础 ...

  9. Java序列化机制和原理及自己的理解

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

随机推荐

  1. 网络编程-SOCKET开发之----3. socket通信工作流程

    1. TCP的socket通信流程 服务端 1)socket----创建socket对象. 2)bind----绑定本机ip+port. 3)listen----监听来电,若在监听到来电,则建立起连接 ...

  2. MT7688交叉编译环境配置

    在ubuntu下设置MT7688交叉编译环境,用于编译mt7688下使用的程序 1.首先在vmware下安装ubuntu64位,由于交叉编译工具需要64位系统,此次安装的是ubuntu14 2.在ub ...

  3. vue的环境安装(二)

    1.安装淘宝镜像     打开命令行,输入以下命令:npm install -g cnpm --registry= https://registry.npm.taobao.org2.全局安装 vue- ...

  4. web项目部署到服务器中浏览器中显示乱码

    项目部署之后浏览器打开查看时页面乱码 这里可能需要修改一下tomcat配置文件,首先找到Tomcat的安装路径下的conf/server.xml文件,找到之后可以CTRL+F搜索如下的内容: < ...

  5. MariaDB dos 下连接

    本地 DOS 连接 将文件目录切换到 bin 文件夹下 cd C:\xampp\mysql\bin 输入连接命令 输入 status,查看数据库版本 远程DOS 连接

  6. icpc2018焦作-I. Distance

    第一发又超时了... 题目大意:给你n个点,然后给你n-1的数,表示两两距离,然后让你输出n个答案,第i个答案表示从这n个点里面挑i个点,然后这i个点两两之间会有一个距离,答案要求这些距离和的最大值. ...

  7. 自己封装element-ui树组件的过滤

    前言:vue开发项目时用到了element-ui的树组件,但是发现一执行过滤事件,树就全部都展开了,为了解决这个问题,只能自己先过滤数剧,再赋值给树组件的data,就避免了一上来全部展开的尴尬. 一. ...

  8. 关于 js中replace 特殊符号 ‘.’ 的问题

    问题: 字符串转数组,但是分割点在‘.’ ,需要保留每个后缀的 ‘.’ + 类型 解决: let videoType = '.avi.rmvb.rm.asf.divx.mpg.mpeg.mpe.wmv ...

  9. S-CMS企建v3二次SQL注入

    S-CMS企建v3二次SQL注入 0x01 前言 继上一篇的S-CMS漏洞再来一波!首发T00ls 0x2 目录 Sql注入二次SQL注入 0x03 Sql注入 漏洞文件:\scms\bbs\bbs. ...

  10. 3种方法来在Linux电脑上查找文件

    如果你不太了解Linux命令,那么在Linux系统里查找文件是比较困难的.只要使用多种不同的终端命令,可以很快地找到文件.Linux命令比其它操作系统的搜索功能更加强大,掌握这些命令就能你完全控制这些 ...