发布时间:2023-09-25 10:30
会话是指一个终端用户与交互系统进行通讯的过程。比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。在我们的实际开发中Servlet规范了一个HttpSession类。
而这里我们说一下什么是请求(request):用户在浏览器上点击了一下,然后到页面停下来,可以粗略的认为是一次请求。一个会话常常包含了多次请求。
session机制属于B/S结构的一部分,这个机制实际上是一种规范,不同的语言都对这种机制进行了实现。
Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
那么为什么需要Session对象来存储会话状态呢?
首先我们要知道HTTP是一种无状态协议,什么是无状态?
知道了什么是无状态我们就可以知道,我们的Web服务器跟浏览器是不建立持久连接的,只有当发送请求才会有连接(浏览器向服务器请求数据,服务器向浏览器返回数据),当请求结束以后连接就断开了,HTTP协议之所以这么做,是因为这样设计可以降低服务器的压力。
HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
在一次会话中,我们使用getSession()方法,该方法中有一个可选参数(false)
Session对象的销毁分为两种情况:
超时销毁
手动销毁
如果你使用过网上银行,你可能会记得网上银行会有一个按钮叫安全退出,这里用的就是手动销毁session对象。
session.invalidate();
Cookie禁用:如果cookie禁用了,那么服务器正常发送cookie给浏览器,但是浏览器拒收了,并不是服务器不发了。
如果cookie禁用了,session机制还是可以实现的。不过需要使用URL重写机制就是url中手动添加Session对象的id。
Servlet三大域对象分别是:ServletContext(应用域)、HttpRequest(请求域)和HttpSession(会话域)
关于前两个可以看看我的博客或者其他博主的博客,这里就不再细说。
在这里我们对比一下三者: