Session的生命周期

1).什么时候创建session对象

      1.1)是否浏览器访问服务端的任何一个JSP或servlet,服务器都会立即创建一个session对象呢?

              不一定。

                  若当前的JSP或servlet是客户端访问的当前WEB应用的第一个资源,且JSP或servelt的page指定的session属性值为false,则服务器就不会为JSP创建一个session对象。

                  若当前的JSP或servlet不是客户端访问的当前WEB应用的第一个资源,且其他页面已经创建一个session对象,则服务器也不会为当前jsp页面创建session对象,而会为当前JSP页面会返回一个会话的session对象。

       1.2)page指令的”session=false”到底是什么意思?

                  当前JSP禁用session隐含变量!但可以使用其他的显示session对象。

       1.3)对于servlet而言,什么时候创建session?

                  若servelt是第浏览器客户端访问的第一个WEB应用的资源,则只有调用了request.getSession()或request.getSession(true)才会创建session对象。

                  其中request.getSession(boolean),

                      boolean为false时,若没有和当前JSP页面关联的session对象则返回null,若有,则返回true。

                      Boolean为true时,一定返回一个session对象,若没有和当前JSP页面关联的session对象,则服务器创建一个新的session对象,若有,直接返回。

                request.getSession()等同于request.getSession(true)。

验证1.3:

a.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'a.jsp' starting page</title>
    
  </head>
  
  <body>
    <a href="<%=basePath%>session/b.jsp">to b.jsp</a>
  </body>
</html>
b.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
    session="false"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'b.jsp' starting page</title>


  </head>
  
  <body>
  
    <%
       HttpSession session=request.getSession(false);
    %>
    <%=session %>
  </body>
</html>

直接访问b.jsp:



通过a.jsp访问b.jsp:


 2).什么时候销毁session对象:

      2.1).直接调用session的invalidate()方法。

    <%
       HttpSession session=request.getSession();
    %>
    <%=session.getId() %>
    <%session.invalidate(); %>
                             这样每次刷新浏览器的,都会产生新的sessionid

2.2).服务器卸载当前WEB应用。

2.3).session设置过期时间(秒)。

    <%
       HttpSession session=request.getSession();
    session.setMaxInactiveInterval(10); 
    %>
    <%=session.getId() %>
    
        2.4). 在web.xml文件中设置过期时间(分钟)。

  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页