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>