会话技术Session快速入门和Session原理分析
会话技术Session快速入门
1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HTTPSession
2.快速入门:
1.获取HTTPSession对象:
HTTPSession session = request.getSession();
2.使用HTTPSession对象:
Object getAttribute(String name)
void setAttribute(String name,Object value)
void removeAttribute(String name)
Session1:
@WebServlet("/sessionD1") public class SessionD1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //使用Session共享数据 //获取session HttpSession session = request.getSession(); //存储数据 session.setAttribute("msg","hello Session"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
Session2
@WebServlet("/sessionD2") public class SessionD2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //使用Session获取数据 //获取Session HttpSession session = request.getSession(); //获取数据 Object msg = session.getAttribute("msg"); System.out.println(msg); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
控制台打印结果:
把浏览器进行关闭在进行获取获取不到了就
Session原理分析
Session的实现是依赖于Cookie的
1、当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID (用来标识这个 Session 对象);
2、服务器将 SessionID 以 Cookie(Cookie 名称为:“ JSESSIONID ”,值为 SessionID 的值,如 Set-Cookie:JESSIONID=10 )的形式发送给客户端浏览器;
3、客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie (如 cookie: JESSIONID=10 )随请求一起发送给服务器;
4、服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。
在 同一次会话中 ,多次请求获取的是 同一个Session对象
注意:
流程中的 Cookie 是容器自动生成的,它的 maxAge 属性取值为 -1,表示仅当前浏览器有效。
浏览器关闭时,对应的 Session 并没有失效,但此时与此 Session 对应的 Cookie 已失效,导致浏览器无法再通过 Cookie 获取服务器端的 Session 对象。
同一浏览器的不同窗口共享同一 Session 对象,但不同浏览器窗口之间不能共享 Session 对象。