关于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. 1071 Speech Patterns——PAT甲级真题

    1071 Speech Patterns People often have a preference among synonyms of the same word. For example, so ...

  2. js中this指向的问题与联系

    前言 JavaScript 中最大的一个安全问题,也是最令人困惑的一个问题,就是在某些情况下this的值是如何确定的.有js基础的同学面对这个问题基本可以想到:this的指向和函数调用的方式相关.这当 ...

  3. oracle之用户

    命令都是在命令行窗口执行 创建用户 1)登陆管理员用户 sqlplus system/密码 sqlplus system/briup 注意不要以分号结尾 2)创建用户 create user 用户名 ...

  4. std和stl的关系

    [前言]在写程序时,虽然一直这么用,有点疑惑为甚么引入了头文件.h还要在加上using namespace std?例如: 1 #include<iostream> 2 using nam ...

  5. Elasticsearch常用API

    Note:以下API基于ES 5x,6x/7x可能略有不同,具体查看官方文档 ES常用API # 查看集群node curl "http://localhost:9200/_cat/node ...

  6. selenium之元素定位的方法(一)

    WebDriver 对象有多种方法用于在页面中寻找元素.他们被分成find_element_*和find_elements_*方法.find_element_*方法返回一个WebElement对象,代 ...

  7. Arrays.Sort()中的那些排序算法

    本文基于JDK 1.8.0_211撰写,基于java.util.Arrays.sort()方法浅谈目前Java所用到的排序算法,仅个人见解和笔记,若有问题欢迎指证,着重介绍其中的TimSort排序,其 ...

  8. CVE-2019-11043-Nginx PHP 远程代码执行

    漏洞原因 Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空.而 php-fpm 在处理 PATH_I ...

  9. linux时间问题

    如果遇到创建时间和更新时间,不一致,先将时间调整为一致. 导致不一致的原因可能是时区不对,使用 tzselect ,将时区调整为Asia/Shanghai , cp /usr/share/zonein ...

  10. mongoDB导出-导入数据

    --导出数据集 C:\MongoDB\db\bin>mongoexport -d ttx-xwms-test -c things -o d:\mongo_data\things.txt C:\M ...