关于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. [计算机图形学]视图变换:MVP变换、视口变换

    目录 一.MVP变换 1. 模型变换 1.1 缩放矩阵 1.2 旋转矩阵 1.3 平移矩阵 2. 视角变换 3. 投影变换 二.Viewport变换 一.MVP变换 MVP变换是模型变换(M).视角变 ...

  2. Git 命令将电脑上的文件上传到 Github

    1.在电脑上安装 Windows 版 Git下载地址:https://git-scm.com/downloads2.使用 Git GUI 生成 SSH Key 3.将 SSH Key 添加到 Gith ...

  3. Linux流量查看工具

    目录 监控总体带宽使用 nload.bmon.slurm.bwm-ng.cbm.speedometer和netload 监控总体带宽使用(批量式输出) vnstat.ifstat.dstat和coll ...

  4. 剑指 Offer 09. 用两个栈实现队列 +java中栈和队列的使用

    剑指 Offer 09. 用两个栈实现队列 题目链接 class CQueue { private Stack<Integer> sta1; private Stack<Intege ...

  5. HDOJ-2181(深搜记录路径)

    哈密顿绕行世界问题 HDOJ-2181 1.本题是典型的搜索记录路径的问题 2.主要使用的方法是dfs深搜,在输入的时候对vector进行排序,这样才能按照字典序输出. 3.为了记录路径,我使用的是两 ...

  6. 2019 GDUT Rating Contest II : Problem B. Hoofball

    题面: 传送门 B. Hoofball Input file: standard input Output file: standard output Time limit: 5 second Memor ...

  7. springboot系列四:springboot整合mybatis jsp

    一.用IDEA 创建maven项目 项目目录结构 1.添加pom jar依赖 <?xml version="1.0" encoding="UTF-8"?& ...

  8. 最权威最简明的maven 使用教程

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...

  9. python-实现双链表

    双链表和单链表进行比较的优点与不同 节点多了一个前驱指针域 在很多基本操作上,多了一种选择,因为双链表可以向前进行移动寻位 如果给每个节点添加一个对应的下标,那么在寻找节点时,我们可以使用二分发来进行 ...

  10. Java并发编程之队列

    Deque(双端队列) 子接口BlockingDeque,实现类如下: ArrayDeque:大下可变的数组双端队列,不允许插入null LinkedList:大小可变的链表双端队列,允许插入null ...