会话与会话技术(Session)

前言

Cookie将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享。但是如果当传递的信息较多时,Cookie技术会增大服务器程序处理的难度,因此,Servlet提供了另一种会话技术————Session,Session可以将会话数据保存到服务器中。

1、Session对象

Session类似于医院的就诊卡,卡上只有卡号。但当人们去医院就诊时,只要出示就诊卡,就可以查询到病人的就诊信息和病理档案

1.1 Session概述

当浏览器访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性,当客户端后续访问服务器时,只要将ID传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务

会话与会话技术(Session)_第1张图片

 除此之外,Session还具有更高的安全性,它将关键数据保存在服务器中。而Cookie将数据保存在客户端的浏览器中。因此Cookie是较为危险的,若客户端遭遇黑客攻击,Cookie信息容易被窃取,数据也可能被篡改,而运用Session可以有效的避免这种情况的发生

1.2 HttpSession API

Session是与每个请求消息紧密相关的,为此HttpServletRequest定义了用于获取Session对象的getSession()方法,该方法有两种重载形式:

1、public HttpSession getSession(boolean create)

参数create判断是否创建新的HttpSession对象,如果参数为true,则在相关的HttpSession对象不存在时创建并返回新的HttpSession对象,否则不创建新的HttpSession对象,而是返回null

2、public HttpSession getSession()

注意:由于getSession()方法可能会产生发送会话标识号的Cookie头字段,所以必须在发送任何响应内容之前调用getSession()方法

HttpSession接口的常用方法:

1、String getID()

功能:用于返回与当前HttpSession对象相关联的会话标识号

2、long getCreationTime()

功能:用于返回Session创建的时间,这个时间是创建Session的时间与1970年1月1日00:00:00之间的时间差毫秒的表示形式

3、long getLastAccessedTime()

功能:用于返回客户端最后一次发送与Session相关请求的时间,这个时间是发送请求的时间与1970年1月1日00:00:00之间的时间差毫秒的表示形式

4、void SetMaxInactiveInterval(int interval)

功能:用于设置当前HttpSession对象可空闲的以秒为单位的最长时间,也就是修改当前会话的默认超时间隔

5、boolean isNew()

功能:判断当前HttpSession对象是否是新创建的

6、void invalidate()

功能:用于强制使Session对象无效

7、ServletContext getServletContext()

功能:用于返回当前HttpSession对象所属于的Web应用程序对象,即代表当前Web应用程序的ServletContext对象

8、void setAttribute(String name,Object value)

功能:用于将一个对象与一个名称关联后存储到当前的HttpSession对象中

9、String getAttribute()

功能:用于从当前HttpSession对象中返回指定名称的属性值

10、void removeAttribute(String name)

功能:用于从当前HttpSession对象中删除指定名称的属性

1.3 Session的生命周期

Session也具有一定的生命周期

Session生效:Session在用户第一次访问服务器时创建。需要注意的是,只有访问JSP、Servlet等程序时才会创建Session。此外,还可调用request.getSession(true)强制生成Session。只访问HTML、IMAGE等静态资源并不会创建Session

Session失效:有两种方法可以使Session失效,分别是“超时限制”使Session失效和强制Session失效

  • “超时限制”使Session失效

Web服务器采用“超时限制”判断客户端是否还在继续访问。在一定时间内,如果某个客户端一直没有请求访问,那么Web服务器就会认为该客户端已经结束请求,并且将与该客户端会话所对应的HttpSession对象变成垃圾对象,等待垃圾收集器将其从内存中彻底清除。如果浏览器超时后再次向服务器发出请求访问,那么服务器会创建一个新的HttpSession对象,并为其分配一个新的ID属性

  • 强制Session失效

invalidate()方法可以强制使Session对象失效,具体用法:

HttpSession session = request.getSession();

session.invalidate();//注销该request的所有session

配置Session失效时间:

  • 1、在项目的web.xml文件中配置Session的失效时间,具体代码(默认单位为分钟):

    30

2、在Servlet程序中手动设置Session的失效时间,具体代码(默认单位为秒):

session.SetMaxInactiveInterval(30 * 60)//设置为-1为永不超时

在Tomcat安装目录的conf\web.xml文件中也有


    30

设置为0或负数,表示永不超时

该文件对站点下所有Web应用程序都有效

你可能感兴趣的:(JavaWeb,服务器,servlet,前端)