1、Session的获取:
(1)无参的方法:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession httpSession=request.getSession(); System.out.println(httpSession.getId()); }
请求中无Cookie,但是响应中存在Cookie:
当再次访问该Servlet的时候,请求中存在Cookie,响应中的Cookie已经没有了:
以上为无参的方法获取Session,如果没有Session则创建一个,如果有则直接返回。
(2)有参的方法:
参数为false:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession httpSession=request.getSession(false); System.out.println(httpSession.getId()); }
如果有Session则直接返回。
没有的话返回500错误:
参数为true:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession httpSession=request.getSession(true); System.out.println(httpSession.getId()); }
此方法与不加参数等效。
2、Session的有效期限:
前三次访问是连续访问三次CookieServlet,可以看出,SESSIONID的值是不会发生变化的,但是当关闭了浏览器,第四次访问CookieServlet时,SESSIONID发生了变化;第五次为更换了浏览器之后的结果,SESSIOID依旧会发生变化。
以下情况下Session需要重新建立:
(1)用户关闭了浏览器。
(2)关闭了服务器。
(3)用户没有向服务器提出请求(超过30分钟),过期后服务器自动删除。
3、Session的设置:
(1)时间:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession httpSession=request.getSession(true); httpSession.setMaxInactiveInterval(10);//十秒后失效 System.out.println(httpSession.getId()); }
第一次访问,成功返回SESSIONID。
过十几秒钟后重新访问发现SESSIONID的值已经改变了:
这是因为第一个SESSIOID已经过期了,需要创建第二个。
(2)强制失效:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); HttpSession httpSession=request.getSession(true); httpSession.invalidate(); System.out.println(httpSession.getId()); }
即执行invalidate()后可以将创建的SESSION立即结束。
4、session的特点:
(1)存储在服务器端。
(2)依赖于Cookie。
(3)有效期限。