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可以不用排队,
演唱会最贵的票同时位置也是最好的,
所以,
世界从不平等,
你有多努力,你就有多特殊
Session执行机制与原理的更多相关文章
- jsp中session执行机制
- Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)
一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...
- cookie机制和session机制的原理和区别[转]
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...
- 再谈mysql锁机制及原理—锁的诠释
加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...
- flask 源码专题(六):session处理机制
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- logrotate机制与原理[转载]
http://blog.lightxue.com/how-logrotate-works/ 日志实在是太有用了,它记录了程序运行时各种信息.通过日志可以分析用户行为,记录运行轨迹,查找程序问题.可惜磁 ...
- Android(java)学习笔记202:Handler消息机制的原理和实现
联合学习 Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系 1. 首先我们通过一个实例案例来引出一个异常: (1)布局文件activity_m ...
- Java序列化的机制和原理
Java序列化的机制和原理 本文讲解了Java序列化的机制和原理.从文中你可以了解如何序列化一个对象,什么时候需要序列化以及Java序列化的算法. 有关Java对象的序列化和反序列化也算是Java基础 ...
- Java序列化机制和原理及自己的理解
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
随机推荐
- MySql由于编码问题,存储过程执行出错。
在存储过程后面加了一段话.红色部分 DELIMITER $$ USE `mysql_wispeed01-test1`$$ DROP PROCEDURE IF EXISTS `sp_crebillno` ...
- JavaScript(八)
闭包 什么是闭包 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回 function aaa(a){ var b = 5; function bbb(){ a++; ...
- linux查看分区是否开启acl权限
1.为什么需要ACL权限 ACL的全称是 Access Control List (访问控制列表) .对于文件或者目录,都有相应的操作权限 r(read 读),w(write 写),x(execute ...
- History Api使用演示
h5新增的一个特性即在history对象上 新增了pushState 和 replaceState 接口 配合在window对象上新增的popState事件使用 为什么要用它:因为通过historya ...
- Vue 入门. 如何在HTML代码里面快速使用Vue
概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...
- 初学angular项目中遇到的一些问题
1.当angular渲染完成后操作DOM树方法 //当数据渲染完毕 ngApp.directive('repeatFinish', function () { return { ...
- vue 学习
1.安装vue.js 学习链接: https://cn.vuejs.org/v2/guide/ vue官方文档 vscode 软件框架 https://doc.vux.li/zh-CN/ vux文档
- C# static 变量 和方法
静态成员属于类所有,无认创建多少实例对象,静态成员在内存中只有一份:实例成员属于类的实例所有,每创建一个实例对象,实例成员都会在内存中分配一块内存区域. 就像图书馆的书,书的数量就是图书馆这个对象的静 ...
- java课程之团队开发冲刺阶段1.5
一.总结昨天进度 1.昨天由于时间较少,没有太多的时间来进行学习Sqlite 二.遇到的困难 1.由于最终的程序需要调用本地的数据库,所以我们需要在安装程序的时候就需要直接附带安装一个本地的数据库到手 ...
- Java-JSON 解析
JSON JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采 ...