还记得我上几次讲到的http协议的无状态吗?也就是说,如果我们仅使用http协议是不能够进行用户状态的跟踪。接下来我们来讲解下会话跟踪!
一、什么是会话?
在java servlet api 中引入session机制来跟踪客户的状态。session指的是在一段时间内,单个客户与web服务器的一连串相关的交互过程。在一个session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。
二、如何进行会话跟踪
在servlet api 中定义了javax.servlet.http.HttpSession接口,servlet容器必须实现这个接口。当一个session开始时,sservlet容器创建一个HttpSession对象,并同时在内存中为其开辟一个空间,在HttpSession对象中可以存放客户状态的信息。Servlet容易为HttpSession分配一个唯一标识符,称为SessionID。servlet容器可以从SessionID保存在客户的浏览器中。每次客户发出http请求时,servlet容器可以从HttpRequest对象中读取SessionID,然后根据SessionID找到相应的HttpSession对象,从而获取客户的状态信息。
三、会话的创建和使用
1、会话的创建
Servlet中的HttpRequestServlet对象为我们提供了以下两种创建和获取HttpSession对象的方法。
HttpSession session=request.getSession(boolean value);
HttpSession session=request.getSession();
那这两种方法有什么区别呢?
第一种方法中布尔值为true时,如果存在与当前请求相关联的会话,就返回该会话。否则创建一个新的会话,并把该会话返回。布尔值为false时,如果存在与当前请求相关联的会话,就返回该会话。否则返回null,不在创建会话
第二种方法等同于第一种方法中布尔参数值为true时的情况
2、会话的使用
在javax.servlet.http.HttpSession 接口中定义的方法,我们常用的是有关进行数据存取的方法。
session.setAttribute(String name ,Object value);
session.getAttribute(String name);
setAttribute(String name ,Object value)是把一个对象value保存在HttpSession 对象中,并为其指定引用名称为name。当我们想使用已经存储在session中的数据时,我们可以使用session.getAttribute(String name)方法,把数据取出来。其中name为我们在存入数据时,指定的用户名称。值得注意的是,session.getAttribute(String name)方法返回值是一个Object类型,所以取出来的数据时,我们要对其进行数据类型转换,而且必须与我们存入的数据类型一致。
eg:String value=(String)session.getAttribute(String name)
四、HttpSession对象的存在周期
1、HttpSession对象的创建
2、HttpSession对象的使用
3、HttpSession对象的结束
结束Session(在session结束时,服务器会清空当前浏览器相关的数据信息)
a、关闭浏览器
b、调用HttpSession的invalidate()方法
c、两次访问时间间隔大于session定义的非活动时间间隔
每天一点点,希望对大家有利~