HttpSession详解「建议收藏」

HttpSession详解「建议收藏」HttpSession服务端的技术服务器会为每一个用户创建一个独立的HttpSessionHttpSession原理当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Sessi

大家好,又见面了,我是你们的朋友全栈君。

HttpSession 服务端的技术
服务器会为每一个用户 创建一个独立的HttpSession

HttpSession原理
当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session
并且生成一个SessionID,这个SessionID在响应浏览器的时候会被装进cookie中,从而被保存到浏览器中
当用户再一次访问Servlet时,请求中会携带着cookie中的SessionID去访问
服务器会根据这个SessionID去查看是否有对应的Session对象
有就拿出来使用;没有就创建一个Session(相当于用户第一次访问)

域的范围:
    Context域 > Session域 > Request域
    Session域 只要会话不结束就会存在 但是Session有默认的存活时间(30分钟)

  需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

 

session进行身份验证的原理:

  当客户端第一次访问服务器的时候,此时客户端的请求中不携带任何标识给服务器,所以此时服务器无法找到与之对应的session,所以会新建session对象,当服务器进行响应的时候,服务器会将session标识放到响应头的Set-Cookie中,会以key-value的形式返回给客户端,例:JSESSIONID=7F149950097E7B5B41B390436497CD21;其中JSESSIONID是固定的,而后面的value值对应的则是给该客户端新创建的session的ID,之后浏览器再次进行服务器访问的时候,客户端会将此key-value放到cookie中一并请求服务器,服务器就会根据此ID寻找对应的session对象了;(当浏览器关闭后,会话结束,由于cookie消失所以对应的session对象标识消失,而对应的session依然存在,但已经成为报废数据等待GC回收了)对应session的ID可以利用此方法得到:session.getId();

1.client-server connection

先上一张图,如下

          HttpSession详解「建议收藏」

               图1

对图1的说明:

  • client与server建立一个连接,这种连接是底层的
  • client发送request到server,等待server的answer
  • server处理request,将处理结果返还给client,这个结果包括status code、其它data

在HTTP/1.1中,在步骤3执行完成后,connection不再被关闭,在connection有效的前提细,后面client不再需要执行步骤1,直接执行步骤2、3就可以。

为了进一步深入,如下图2,图2是我从国外的网上截下来的,建议读者阅读原文

            HttpSession详解「建议收藏」

                    图2 HttpSession生成后会有个sessionID

  • Client第一次发送请求,web container生成唯一的session ID(生成session ID的源码,如有兴趣,可以看下tomcat源码, 随机数+时间+jvmid),并将其返回给client(在web container返回给client的response中),web container上的这个HttpSession是临时的。
  • 后面Client在每次发送请求给服务器时,都将session ID发送给web container,这样web container就很容易区分出是哪个client.
  • Web container使用这个session ID,找到对应的HttpSession,并将此次request与这个HttpSession联系起来。  

 

HttpSession生命周期:

1. 什么时候创建HttpSession

1).对于JSP:
  是否浏览器访问服务端的任何一个JSP或Servlet,服务器都会立即创建一个HttpSession对象呢? 不一定。
  ①.若当前的JSP或(Servlet)是客户端访问的当前WEB应用的第一个资源,且JSP的page指定的session属性为false,则服务器就不会为JSP创建一个HttpSession对象;
  ②.若当前JSP不是客户端访问的当前WEB应用的第一个资源,且其他页面已经创建一个HttpSession对象,则服务器也不会为当前JSP创建一个新的HttpSession对象,而会把和当前会话关联的那个HttpSession对象返回给当前的JSP页面。

2).page指令的session=”false”到底表示什么意思:当前JSP页面禁用session隐含变量!但可以使用其他的显式的对象

3).对于Servlet而言:
  若Servlet是客户端访问的第一个WEB应用的资源,则只有调用了request.getSession()或request.getSession(true) 才会创建HttpSession对象

4). 在Servlet中如何获取HttpSession对象?
  request.getSession(boolean create):create为false,若没有和当前JSP页面关联的HttpSession对象,则返回null;
  若有返回true create为true一定返回一个HTTPSession对象。若没有和昂前JSP页面关联的HttpSession对象,则服务器创建一个新的HttpSession对象返回,若有,则直接返回关联。
  request.getSession()等同于request.getSession(true)

2. 什么时候销毁HttpSession对象:

1).直接调用HttpSession的invalidate()方法:使HttpSession失效
2).服务器卸载了当前Web应用。
3).超出HttpSession的过期时间。

 

设置HttpSession的过期时间:单位为S

session.setMaxInactiveInterval(5);
out.print(session.getMaxInactiveInterval());
<!--在web.xml文件中设置HttpSession过期时间。 -->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
<!--系统默认30分钟 -->

  由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

Session具有以下特点:
(1)Session中的数据保存在服务器端;
(2)Session中可以保存任意类型的数据;
(3)Session默认的生命周期是30分钟,可以手动设置更长或更短的时间。

 

1:session进行身份验证的原理:

当客户端第一次访问服务器的时候,此时客户端的请求中不携带任何标识给服务器,所以此时服务器无法找到与之对应的

session,所以会新建session对象,当服务器进行响应的时候,服务器会将session标识放到响应头的Set-Cookie中,会以

key-value的形式返回给客户端,例:JSESSIONID=7F149950097E7B5B41B390436497CD21;其中JSESSIONID是固定的,

而后面的value值对应的则是给该客户端新创建的session的ID,之后浏览器再次进行服务器访问的时候,客户端会将此key-value

放到cookie中一并请求服务器,服务器就会根据此ID寻找对应的session对象了;(当浏览器关闭后,会话结束,由于cookie消

失所以对应的session对象标识消失,而对应的session依然存在,但已经成为报废数据等待GC回收了)

对应session的ID可以利用此方法得到:session.getId();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154287.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&amp;攻略+SSG改动+打开存档补丁]…

    【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&amp;攻略+SSG改动+打开存档补丁]…冒险者们哟。寻找龙秘玉吧——!ninetail的最新作,是使用丰富多彩的技能·道具探索迷宫的3D迷宫RPG!存在着骑士和神官的架空世界常见的职业为首的13种职业。超过数百种的道具的登场!和伙伴一起探索迷宫,强化入手的装备。以及打败新的强敌,以得到稀有道具为目标!同一时候。本作的故事依据与哪一个组织接触而分为“Low线”与“Chaos线”两种类。Low线为王道的冒…

  • idea2021.8.2 激活码【永久激活】[通俗易懂]

    (idea2021.8.2 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~BI7JCUH1TG-eyJsaWNlb…

  • 模糊控制器matlab仿真_有关bp神经网络Matlab的书

    模糊控制器matlab仿真_有关bp神经网络Matlab的书以下多套系统源码:1、MATLAB二级倒立摆三级倒立摆(在MATLAB下的二级倒立摆、三级倒立摆的仿真。内有所有需要的m文件)2、倒立摆matlab代码3、神经网络倒立摆控制(利用matlab对倒立摆的仿真,效果十分不错)4、二级倒立摆模型(这是一个演示直线二级倒立摆的matlab运行模型,这个模型能够根据仿真数据动画演示出二级倒立摆的运动情况。)5、倒立摆源码(倒立摆源码程序,注释很详细,是学习倒立摆原理,PID算法很好的参考资料。代码书写规范,注释详细。)6、二级倒立摆神经网络控制7

  • spss分析方法聚类分析_变量聚类分析

    spss分析方法聚类分析_变量聚类分析聚类分析是根据研究对象的特征,按照一定标准对研究对象进行分类的一种分析方法。下面我们主要从下面四个方面来解说:一、实际应用聚类分析的目标就是在相似的基础上收集数据来分类。聚类源于很多领域,包括数学,计算机科学,统计学,生物学和经济学。在不同的应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。商业上:聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同的客户群的特征。聚类分析是细分市场的有效工具,同时也可用于研究消费者行为

    2022年10月18日
  • UVA644

    UVA644题意:输入多个序列,判断是否存在前缀关系。思路如下:现

  • 动态库编程详解_c语言gui库

    动态库编程详解_c语言gui库目录概述一、动态库概念与分类1、什么是动态库2、动态库分类4、动态库解决的问题二、动态库的创建1、规则动态库2、声明导出函数的两种方式2.1__declspec(dllexport)导出2.2.def文件导出3、导出导入类三、隐式、显示调用动态库1、动态库隐式调用2、动态库显示调用3.显示、隐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号