Web常用对象之Session

Session:

介绍:
HttpSession对象是 javax.servlet.http.HttpSession 的实例

HttpSession 对象是 javax.servlet.http.HttpSession 的实例,该接口并不像 HttpServletRequest 或 HttpServletResponse 还存在一个父接口,该接口只是一个 纯粹的接口。这因为 session 本身就属于 HTTP 协议的范畴。

对于服务器而言,每一个连接到他的客户端都是一个Session,servlet容器使用此接口创建HTTP客户端和HTTP服务器之间的会话。会话将保留指定的 时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该 用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息, 比如会话标识符、创建时间和最后一次访问时间。在整个 session 中,最重要的 就是属性的操作。

session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览 器,则无法取得之前设置的 session,因为每一个 session 只保存在当前的浏览 器当中,并在相关的页面取得

Session的作用:
Session的作用就是为了标识一次会话,或者说是确认一个用户;并且在哦第一次会话期间共享数据

我们可以通过 req.getSession()方 法,来获取当前会话的 session 对象。

HttpSession session =req.getSession();

标识会话JESSIONID:

Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志, 这个标志就是 sessionId。
每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一 步会查看是否从客户端回传一个名为 JSESSION 的 cookie,如果没有则认为这是 一次新的会话,会创建 一个新的 session 对象,并用唯一的 sessionId 为此次 会话做一个标志。如果有 JESSIONID 这 个 cookie 回传,服务器则会根据 JSESSIONID 这个值去查看是否含有 id 为 JSESSION 值的 session 对象,如果没有则 认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话; 如 果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。
这里提到一个叫做 JSESSION 的 cookie,这是一个比较特殊的 cookie,当用 户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSION,值 为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对 象,并添加到 response 对象中,响应给客户端,有效时间为关闭浏览器

Session 的底层依赖 Cookie 来实现。
在这里插入图片描述

作为域对象:

Session 用来表示一次会话,在一次会话中数据是可以共享的,这时 session 作为域对象存在,可以通过 setAttribute(name,value);方法向域对象中添加数据, 通过 getAttribute(name) 从域对象中获取数据,通过 removeAttribute(name)从域 对象中移除数据。
在这里插入图片描述
数据存储在 session 域对象中,当 session 对象不存在了,或者是两个不同 的 session 对 象时,数据也就不能共享了。这就不得不谈到 session 的生命周 期。
在这里插入图片描述
在这里插入图片描述
Session 的销毁

默认时间到了:

当客户端第一次请求 servlet 并且操作 session 时,session 对象生成, Tomcat 中 session 默认的存活时间为 30min,即你不操作界面的时间,一旦有 操作,session 会重新计时。那么 session 的默认事件可以改么?答案是肯定的。 可以在 Tomcat 中的 web.xml 文件中进行修改。 如下图:

在这里插入图片描述
自己设定到期时间:

当然除了以上的修改方式外,我们也可以在程序中自己设定 session 的生命 周期,通过 session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间, 单位为秒。
在这里插入图片描述
当然我们也可以通过 getMaxInactiveInterval();方法来查看当前 Session 对 象的最大不活动时间

立即失效:

或者我们也可以通过 session.invalidate();方法让 session 立刻失效

关闭浏览器:

从前面的 JESSION 可知道,session 的底层依赖 cookie 实现,并且该 cookie 的有效时间为关闭浏览器,从而 session 在浏览器关闭时也相当于失效了(因为 没有 JSESSION 再与之对应)。

关闭服务器:

只要在非正常关闭服务器时,才会销毁session对象;
如果是正常关闭,会将该session对象存到(钝化)本地磁盘,等下次获取时再从本地磁盘中读取出来(活化)
当非正常关闭服务器时,session 销毁;当正常关闭服务器时,Session 将被序列化到磁盘上,在工作空间 work 目录下的 SESSION.ser 文件中,下次启动服务时,自动加载到内存。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值