session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= session.getId() %>
</body>
</html>
第一次请求,服务端会给客户端浏览器一个JSESSIONID
第二次请求客户端浏览器会把cookie带回去
持久化的cookie,保存20s ,关掉浏览器还会有。
<%= session.getId() %>
<%
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(20);
response.addCookie(cookie);
%>
问题:是否浏览器访问服务端的任何一个JSP或者Servlet,服务端都会立即创建一个HttpSession对象呢?
不一定,
1、若当前的JSP或者Servlet是客户端访问当前WEB应用的第一个资源,且JSP的page指定的session属性值为false,则服务器就不会为JSP创建一个HttpSession对象
2、若当期JSP不是客户端访问的当前WEB应用的第一个资源,且其他页面已经创建了一个HttpSession对象,则当前JSP页面会返回一个会话的HttpSession对象,而不会创建一个新的HttpSession对象.
session="false" 意思为JSP页面禁用session隐含变量,但是可以显式的创建HttpSession对象.
1). 默认情况下, 第一次访问一个 WEB 应用的一个 JSP 页面时, 该页面都必须有一个和这个请求相关联的 Session 对象.
因为 page 指定的 session 属性默认为 true
2). 若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关联
所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session 对象.
3). 创建一个 Session 对象: 若 page 指定的 session 设置为 false 或 在 Servlet 中可以通过以下 API 获取 Session 对象.
request.getSession(flag): 若 flag 为 true, 则一定会返回一个 HttpSession 对象, 如果已经有和当前 JSP 页面关联的 HttpSession
对象, 直接返回; 如果没有, 则创建一个新的返回. flag 为 false: 若有关联的, 则返回; 若没有, 则返回 null
①. 直接调用 HttpSession 的 invalidate()
②. HttpSession 超过过期时间.
> 返回最大时效: getMaxInactiveInterval() 单位是秒
> 设置最大时效: setMaxInactiveInterval(int interval)
> 可以在 web.xml 文件中配置 Session 的最大时效, 单位是分钟.
也可以在tomcat配置文件中conf/web.xml设置
③. 卸载当前 WEB 应用.
注意: 关闭浏览器不会销毁 Session!
<%
HttpSession session = request.getSession(true);
out.println(session);
out.print("<br>");
//设置seesion有效期5s钟
session.setMaxInactiveInterval(5);
//获取 Session 的最大时效, 默认为 30 分钟.
out.print(session.getMaxInactiveInterval());
session.invalidate();
%>
登录案例:用户登录案例.
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
SessionID: <%= session.getId() %>
<br><br>
IsNew: <%= session.isNew() %>
<br><br>
MaxInactiveInterval: <%= session.getMaxInactiveInterval() %>
<br><br>
CreateTime: <%= session.getCreationTime() %>
<br><br>
LastAccessTime: <%= session.getLastAccessedTime() %>
<br><br>
<%
Object username = session.getAttribute("username");
if(username == null){
username = "";
}
%>
<form action="hello.jsp" method="post">
username: <input type="text" name="username"
value="<%= username %>"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
SessionID: <%= session.getId() %>
<br><br>
IsNew: <%= session.isNew() %>
<br><br>
MaxInactiveInterval: <%= session.getMaxInactiveInterval() %>
<br><br>
CreateTime: <%= session.getCreationTime() %>
<br><br>
LastAccessTime: <%= session.getLastAccessedTime() %>
<br><br>
Hello: <%= request.getParameter("username") %>
<br><br>
<%
session.setAttribute("username", request.getParameter("username"));
%>
<a href="login.jsp">重新登录</a>
<a href="logout.jsp">注销</a>
</body>
</html>
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
SessionID: <%= session.getId() %>
<br><br>
IsNew: <%= session.isNew() %>
<br><br>
MaxInactiveInterval: <%= session.getMaxInactiveInterval() %>
<br><br>
CreateTime: <%= session.getCreationTime() %>
<br><br>
LastAccessTime: <%= session.getLastAccessedTime() %>
<br><br>
Bye: <%= session.getAttribute("username") %>
<br><br>
<a href="login.jsp">重新登录</a>
<%
//使session失效
session.invalidate();
%>
</body>
</html>
如果把cookie禁用后,如何跟踪session呢.?
HttpServletResponse接口中定义了两个用于完成URL重写方法:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章