关于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. vue路由理解

    vue路由:就是一个菜单的概念比如说有一个菜单栏,菜单栏上有很多按钮,当你点击一个按钮时会出现不同的页面,这就是vue路由

  2. webpack理解

    打包工具 可以将多个静态文件打包成一个静态文件例如将1.js.2.js.3.css打包成h.js一个静态文件 这样做的好处是:可以减少页面的请求次数 以往是请求多个静态页面,使用webpack后会减少 ...

  3. Django Admin后台管理功能使用+二次开发

    一  使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7  (Windows x86-64 executable in ...

  4. IntelliJ Idea Error Address localhost 1099 is already in use.

        Reference: https://stackoverflow.com/questions/38986910/intellij-idea-address-localhost1099-is-a ...

  5. 一文讲通.NET Core部署到Windows IIS最全解决方案

    回顾之前的ASP.NET的经典托管 在经典ASP.NET应用程序中,所有一切都托管在IIS工作进程中(w3wp.exe),这也被称为IIS应用程序池.ASP.NET程序被托管在应用程序池中,并且被按照 ...

  6. 使用windbg定位内存问题【入门级】

    1. 背景 在开发过程中,我们可能遇到应用程序线程占用过大的问题,可以通过windbg命令去定位哪些类型,哪些内存一直占用堆资源,从而查出问题,解决问题. 2. 准备工作 工具: 抓取DUMP文件的工 ...

  7. PCA——主成分分析

    PCA(Principal Components Analysis)主成分分析是一个简单的机器学习算法,利用正交变换把由线性相关变量表示的观测数据转换为由少量线性无关比变量表示的数据,实现降维的同时尽 ...

  8. 番外----python入门----pip相关

    pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 但是,由于pip使用的pip仓库默认为:http://pypi.python.org/ 是国外的 ...

  9. 用c++解一元二次方程

    解方程 github项目地址 这两天得知初二的表妹学了一元二次方程,听说还不会解,我就想着试试用C语言编写解方程. 一元二次方程 用公式法 这种方法效果很好: #include"funct. ...

  10. 最权威的html 标签属性大全

    <p>---恢复内容开始---</p>1.html标签 <marquee>...</marquee>普通卷动 <marquee behavior= ...