关于JavaWeb中的HttpSession (一)

* Session表示会话,不止存在于JavaWeb之中,只要是Web开发都会存在这种机制

* Session包:javax.servlet.http.HttpSession 简称Session会话

* Cookie可以将会话状态保存在浏览器客户端,而Session可以将会话保存在服务器端

* Session对象是用户会话级别的对象, 每一个用户访问服务器都会创建一个独一无二的Session对象, 而该Session对象会被Tomcat服务器进行维护,只要是同一个用户向服务器发送请求,无论请求多少次,那么都会访问同一个Session对象。

* Session对象一个用户一个,一百个用户一百个,A来访问服务器就保存A的Session会话状态,B来访问就保存下来B的Session会话状态。

*  什么是一次会话?

     - 多数情况下:用户打开浏览器,在浏览器上发送多次请求,直到关闭浏览器,表示一次完整的会话,一次会话包括多次请求。

     -  本质上: 从Session对象创建, 到session对象超时, 到Session对象销毁。是一次完整的会话。

         - Httpsession对象是一个会话级别的对象,一次会话对应一个新的HttpSession对象。

     - 在会话进行过程中,web服务器一直为当前用户维护着同一个HtpSession对象。

* 为什么用户的每一次请求都可以拿到属于自己的会话对象而不会获取到别的用户的呢 ? Session的实现原理?

    - 在Web容器中,服务器维护着大量的HttpSession对象,也就是说在Web容器中存在着一个Session列表。

    - Session列表中存放着 <key , Session> 其中key是一个自动生成的Cookie对象的value值部分,Cookie中存放着<"JSESSIONID","32位字符串编码"> JSESSIONID是一个自动生成的具有全球唯一性的32位字符串编码,该编码值指向当前用户的Session
对象和当前用户的Session对象进行绑定。 例如:Session列表存储着: <CookieValue, Session> 1. 打开浏览器,在浏览器上首次发送请求访问一个服务器,服务器会自动创建一个HttpSession对象,该对象代表一次会话。 2. 服务器创建HttpSession对象的同时会自动生成一个与之对应的Cookie对象,该Cookie对象的name是JSESSIONID,Cookie的value是是32位长度的字符串,具有全球唯一性。 例如: Cookie cookie = new Cookie("JSESSIONID","32位字符串"); 3. 服务器将该Cookie对象的value值和HttpSession对象绑定在一起,存储在Session列表中。 4. 服务器将该Cookie对象发送给服务器,并绑定服务器的根路径,存储在浏览器的缓存中。 5. 那么自此以后浏览器的每次向该服务器发送请求都会向该服务器提交该Cookie,服务器接收到Cookie,验证该Cookie对象的name是JSESSIONID,就会根据Cookie的value值去Session列表中检索与之对应的Session对象。 6. 而因为该cookie对象存储在浏览器的缓存中,所以只要浏览器关闭该Cookie对象就失效了。 7. 关闭浏览器以后再重新打开浏览器,再次访问该服务器,因为此时浏览器缓存中的Cookie对象已经失效,所以不能再向服务器提交JSESSIONID Cookie,那么服务器就会为该浏览器创建一个新的HttpSession对象,并生成一个新的Cookie对象,再次发送
给浏览器,存储在浏览器的缓存中

JAVAEE_Servlet_24_HttpSession实现原理的更多相关文章

  1. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. 线性判别分析LDA原理总结

    在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...

  4. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  5. H5单页面手势滑屏切换原理

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...

  6. .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理

    .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...

  7. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  8. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

  9. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

随机推荐

  1. Redis基本数据结构之ZSet

    1.1Zset(有序集合) Zset保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序.但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的 ...

  2. hive复杂数据类型的用法

    目录 1.简单描述 2.测试 1.简单描述 arrays: ARRAY<data_type> maps: MAP<primitive_type, data_type> stru ...

  3. python行与列显示不全

    在显示数据框时添加以下代码 #显示所有列 pd.set_option('display.max_columns', None) #显示所有行 pd.set_option('display.max_ro ...

  4. DRF 外键字段深度查询优化、ListSerializer辅助完成群改

    目录 一.Response封装 二.外键字段深度查询 1.序列化配置exclude.depth 2.模型层函数.插拔式字段查询 三.listserializer辅助类 一.Response封装 用de ...

  5. OLAP分析

    OLAP分析 1 视频教程 视频教程 如果对资源下载.分析操作有疑问,直接跟着视频做一遍即可. 2 数据集合说明 FoodMart,其为一家食品连锁店经营产生的数据存放的数据库,包括销售数据.库存数据 ...

  6. Docker SDK for Python

    一.概述 Docker引擎API的Python库.它允许您执行docker命令所做的任何操作,但可以在Python应用程序中运行容器.管理容器.管理群集等. 官方文档: https://docker- ...

  7. zabbix 面板graph图上没有数据显示

    1. 问题: zabbix_server日志出现大量如下错误: query failed: [1526] Table has no partition for value 1507509984 2. ...

  8. 树莓派4b通过外接ssd硬盘启动系统失败的排查和解决

    树莓派4b通过外接ssd硬盘启动系统失败,症状: 屏幕卡在黑屏或提示 mmc1:Controller never released inhibit bit(s).... 先说如何设置硬盘启动,后面是解 ...

  9. 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer

    当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...

  10. NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

    内容参考 对分布式对定义参考这篇文章: 微服务都想用,先把分布式和微服务之间的关系说清楚 对分布式架构中心或无中心对比参考这篇文章: 分布式存储单主.多主和无中心架构的特征与趋势 对HDFS对内部机制 ...