关于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. tomcat运行多个项目同一个端口与不同端口的设置

    一.首先打包项目 这里采用eclipse开发工具,选中项目右击,点击Export进入 选择web下的 WAR file ,点击next 在这里可能有坑,新装的eclipse没有web文件夹 此时需要下 ...

  2. 深入剖析 ConcurrentHashMap

    自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...

  3. Java基础语法:注释

    书写注释是一个非常好的习惯. 注释并不会被执行,是给我们写代码的人看的. Java中的注释有三种: 单行注释(Line comment) 多行注释(Block comment) 文档注释(JavaDo ...

  4. vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap

    目录 一.vue的ajax插件:axios 1.安装axios 2.axios参数 二.CORS跨域问题(同源策略) 1.Django解决CORS跨域问题方法 三.前端请求携带参数及Django后台如 ...

  5. HBase 数据存储结构

    在HBase中, 从逻辑上来讲数据大概就长这样: 单从图中的逻辑模型来看, HBase 和 MySQL 的区别就是: 将不同的列归属与同一个列族下 支持多版本数据 这看着感觉也没有那么太大的区别呀, ...

  6. 后端程序员之路 34、Index搜索引擎实现分析3-对文章索引的两层分块

    # part_indexer 对文章根据id的hash进行分块索引- 持有 search_index _inc_index[2]; search_index _history_index[2]; 进行 ...

  7. Prometheus时序数据库-磁盘中的存储结构

    Prometheus时序数据库-磁盘中的存储结构 前言 之前的文章里,笔者详细描述了监控数据在Prometheus内存中的结构.而其在磁盘中的存储结构,也是非常有意思的,关于这部分内容,将在本篇文章进 ...

  8. Visual Studio Code运行Python代码

    目录 步骤 参考 用Pycharm开发Python程序是最好的选择,就是有点贵.基于这个背景,我就尝试一下别的IDE,看到很多人在用免费.开源的Visual Studio Code,下面是配置并运行P ...

  9. [Elementary Mechanics Using Python-02]Feather in tornado

    Problem 9.17 Feather in tornado. In this project you will learn to use Newton's laws and the force m ...

  10. Flask模板注入

    Flask模板注入 Flask模板注入漏洞属于经典的SSTI(服务器模板注入漏洞). Flask案例 一个简单的Flask应用案例: from flask import Flask,render_te ...