会话跟踪

还记得我上几次讲到的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定义的非活动时间间隔

每天一点点,希望对大家有利~

你可能感兴趣的:(Web,servlet,浏览器,活动)