Cookie绘画跟踪技术有一个很大缺点:信息不安全信息是暴露在服务器中的怎么办所以就有了Session技术
Session技术的好处:隐藏用户信息,信息不再存储在客户端而是在服务器,客户端拿到只是服务器对象识别的唯一钥匙,在返回和钥匙相对应Session对象信息,可以有大的信息量(集合存储),因为信息都在服务器存储客户端只是拿着钥匙去调用而已。
Session的调用过程:他有个Session池里面存放着Session对象
第一步先问你又没有Session对象 第一次肯定没有啊
第二步 知道你没有 咋办,创建呗,创建好了Session并将对象放到池子里,返回这个Session对象的唯一Session对象Id
第三步:拿到返回的Session对象ID通过Cookie将他存储在服务器上
那往后的调用就是
通过Cookie拿着你的Session_ID去找Session对象
Session设置
Session 在服务器的生命周期是 无任何访问 30分钟外销毁
Session 可以设置有效时间,但是别设置很长时间 应该会占内存的
<session-timeout>1</session-timeout><!--时间设置-->
<cookie-config>
<name>KAIGEJSESSIONID</name><Session JSESSIONID设置>
</cookie-config>
</session-config>
JSESSIONID 是使用Cookie技术存放在浏览器内存中(存放的是唯一钥匙,而不是值)
创建SESSION
request.getSession(boolean); 自己选套餐
true 创建session的时候问浏览器是否给了jsession_id
没有创建一个Session对象 仍进池里,生产出JSESSION_ID、返回Session对象
有 去session对象池里抓对象 1.没有抓到 就创建一个
2.有抓到就更新存活时间 返回对象
false 创建session的时候问浏览器是否给了jsessionid
没有 就返回null
有 就去池里抓1.有对象就更新存活世界并返回session对象
2.没有 返回null
request.getSession();(有就抓没有就创建)
演示代码
public class B extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
HttpSession httpSession = req.getSession();
httpSession.setAttribute("name", "嘻嘻哈哈");
RequestDispatcher requestDispatcher = req.getRequestDispatcher("a");
requestDispatcher.forward(req, resp);
}
}
@WebServlet("/a")
public class A extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession httpSession = req.getSession();
System.out.println(httpSession.getAttribute("name"));
}
}