一 session会话跟踪技术
http无状态:
服务器无法判断两次请求是否是同一个客户端发出的,所以会采用会话跟踪技术来
实现
会话跟踪技术
客户端第一次发送请求给服务器,服务器获取不到则会创建新的,然后响应给
客户端,下次客户端给服务器发送请求时,会把sessionID带给服务器,服务器
就能获取到了
//演示Session
public class Demo03Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session,如果获取不到,则创建一个新的
HttpSession session=request.getSession();
System.out.println("session ID:"+session.getId());//获取sessionID
System.out.println(session.getMaxInactiveInterval());//获取session的非激活时间间隔,默认是1800秒
session.invalidate();
}
}
常用API
request.getSession()
获取当前会话,没有则创建一个新的会话
request.getSession(true)
效果和不带参数相同,
request.getSession(false)
获取当前会话,没有则返回null 不会创建新的
session.getId()
获取sessionID
session.idNew()
判断当前session是否是新的
session.getMaxInactiveInterval()
获取session的非激活时间间隔,默认是1800秒
session.invalidate()
强制性让会话立即失效
二 session保存作用域
session保存作用域是和一个具体的某一个session对应的,同一个session相同,
可以储存不同key-value队,但不能重复。不同的session访问的值不同
session.setAttribute(“uname”,“lina”)
向当前的session保护作用域保存一个数据“lina" ,对应的key为uname
session.getAttribute(“uname”)
从当前session保存作用域获取指定的key,也就是uname,对应的value值
像这个图,同一个session的保存作用域保存到一个容器上去,不同的在不同的容器上
//演示向HttpSession保存数据
public class Demo04Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("uname","lina");
System.out.println("1111");
}
}
//演示从cession保存作用域获取指定的key对应的value值
public class Demo05Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj=request.getSession().getAttribute("uname");
System.out.println(unameObj);
}
}