问题一、session在何时被创建
问过很多人,大家对session创建的时机有一个常见的误解就认为session在有客户端访问时就被创建,但想了好久也没有想明白既然request.getSession(false)是在没有session的时候返回null,但既然一旦浏览器访问了应用就创建session,则request.getSession(false)就永远不会返回null,那么这个方法的意义何在呢。带着这个问题去网上搜了一下才恍然大悟。
事实上HttpSession是直到服务器端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session=”false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
当客户端浏览器第一次访问服务器时,服务器为每个浏览器创建不同的HttpSession对象。在服务器端使用request.getSession()方法来获得HttpSession对象,并以此来使用HttpSession接口为我们提供的方法,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
问题二、session什么时候失效?
1. 服务器会把长时间没有活动的session从服务器内存中清除,此时Session便失效