客户端和服务器通信的过程中,自然而然的会产生一些数据交互。比如,A用户登录了邮箱,那么web服务器该怎么知道C一段时间后的登录状态呢?虽然HttpServletRequest对象和ServletContext对象都可以保存数据,但是不适用于这种情况。
当浏览器向ServletB发出请求时,它的登陆操作已经完成了,但是却没有留下任何依据能够证明它已经成功登陆。以至于ServletB对他的登陆状态无法判别,这种情况叫用户状态的丢失。造成这种结果的原因是http协议的无状态;
为了解决这个问题,Servlet提供了会话跟踪技术来追踪用户状态,简单的说就是指将用户操作过的重要业务步骤记录下来,以便在后续的处理中使用。
客户端浏览器第一次访问,服务器端创建一个会话对象。并且具有id的唯一值。 依赖cookie将sessionId的值发送给客户端。第二次请求的时候,客户端浏览器携带sessionId到服务器。服务器端获得sessionId, 从而实现了会话跟踪。
创建在服务器端,并且保存在服务器端 。
- import java.io.IOException;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
-
- @WebServlet("/testsession.do")
- public class testSessionServlet extends HttpServlet {
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("testSessionServlet被请求到了");
-
-
- HttpSession session = req.getSession();
- //当调用getSession(true)时,他首先检查用户的会话Cookie是否存在
- //如果不存在:为其创建新的session对象,将session对象的ID保存到新建的会话Cookie中,并 将会话cookie送回浏览器 。
- //如果存在:则按照会话Cookie 的值找到对应的session对象返回。
- System.out.println(session.getId());
- }
-
- }
- // 获取Session
- HttpSession session = request.getSession();
-
- // 将指定Key-Value键值对,存入当前Session会话中。
- void setAttribute(String name, Object value);
-
- // 按照指定的Key从当前Session会话中获取Value,返回值为Object类型的对象,如果不存在,则返回null。
- Object getAttribute(String name);
-
- // 按照指定的Key从当前Session会话中删除Key-Value键值对。
- void removeAttribute(String name);
-
- // 获取当前Session会话的创建时间。
- long time = session.getCreationTime();
-
- // 获取当前Session会话最后一次请求的访问时间。
- long lastAccessedTime = session.getLastAccessedTime();
-
- // 获取当前Session会话的SESSION ID
- String id = session.getId();
-
- //设置最大有效时间,以秒为单位
- session.setMaxInactiveInterval(100);
-
- // session失效
- session.invalidate();
-