一、HttpSession接口中的方法
方法名 | 功能描述 |
---|---|
getId() | 获取SessionID |
isNew() | Session是否是新的(如果客户端请求消息中返回了一个与Servlet程序当前获得的HttpSession对象的会话标识号相同,则认为这个HttpSession对象不是新建的) |
setMaxInactiveInterval() | 设置Session的最大时效 |
getMaxInactiveInterval() | 获取Session的最大时效 |
getCreationTime() | 获取Session的创建时间 |
getLastAccessedTime() | 获取Session的最后访问时间 |
invalidate() | 销毁Session对象 |
setAttribute() | 设置数据,将数据保存在Session这个域对象中 |
getAttribute() | 获取数据,将保存在Session这个域对象中的数据获取出来 |
二、HttpSession常用方法的小案例
我们将通过一个小案例来深刻理解HttpSession接口中的这些方法。
2.1 案例要求
①. 有这样一个登录页面,页面中会显示一些Session的信息,然后会有一个表单,要求你输入用户名和密码进行登录。
②. 登录之后会进入欢迎页面,欢迎页面中依旧会显示一些Session的信息,然后有个 您好:XXX用户(XXX就是你的用户名),下方会有两个超链接,一个是重新登陆,一个是注销。
③. 当你点重新登陆超链接时,会使你重新跳转到登录页面,只不过用户名系统会自动根据你上次登录的用户名帮你填好,输入密码后点击登录按钮,会再次进入欢迎页面。
④. 当你点注销时,会显示 再见:XXX用户(XXX就是你的用户名) ,您已退出,请重新登录!,然后下方会有个重新登陆超链接来进行重新登录。
⑤. 在注销页面点重新登录后,用户名为空,需要你重新输入用户名进行登录。
2.2 案例实现
login.jsp(登录页面)
<body>
SessionID:<%= session.getId() %>
<br><br>
Session是否是新的:<%= session.isNew() %>
<br><br>
Session的最大时效:<%= session.getMaxInactiveInterval() %>
<br><br>
Session创建时间:<%= session.getCreationTime() %>
<br><br>
Session最后的访问时间:<%= session.getLastAccessedTime() %>
<br><br>
<%
Object username = session.getAttribute("username");
if (username == null) {
username = "";
}
%>
<form action="hello.jsp" method="post">
用户名:<input type="text" name="username" value="<%= username %>">
密码:<input type="password">
<input type="submit" value="登录">
</form>
</body>
hello.jsp(欢迎页面)
<body>
SessionID:<%= session.getId() %>
<br><br>
Session是否是新的:<%= session.isNew() %>
<br><br>
Session的最大时效:<%= session.getMaxInactiveInterval() %>
<br><br>
Session创建时间:<%= session.getCreationTime() %>
<br><br>
Session最后的访问时间:<%= session.getLastAccessedTime() %>
<br><br>
您好:<%= request.getParameter("username") %>
<br><br>
<%
session.setAttribute("username", request.getParameter("username"));
%>
<a href="login.jsp">重新登录</a>
<a href="logout.jsp">注销</a>
</body>
logout.jsp(注销页面)
<body>
SessionID:<%= session.getId() %>
<br><br>
Session是否是新的:<%= session.isNew() %>
<br><br>
Session的最大时效:<%= session.getMaxInactiveInterval() %>
<br><br>
Session创建时间:<%= session.getCreationTime() %>
<br><br>
Session最后的访问时间:<%= session.getLastAccessedTime() %>
<br><br>
再见:<%= session.getAttribute("username") %> ,您已退出,请重新登录!
<br><br>
<a href="login.jsp">重新登录</a>
<%
session.invalidate();
%>
</body>
2.3 功能展示
①. 登录页面:
②. 输入用户名和密码后,进入欢迎页面:
③. 进入重新登录:
④. 进入注销:
⑤. 注销之后点重新登陆,用户名为空,需要你重新输入用户名进行登录:
2.4 结果分析
本案例把Session的一些常用方法都用到了。
通过本案例,我们可以知道:
①. 在我们登录进入欢迎页面后,我们将用户名保存在Session这个域对象中,点重新登陆 再次进入login.jsp中我们将用户名从域对象中取出来。
②. 我们在点注销超链接后,实际上是用 invalidate() 方法将Session对象销毁了,以至于当你点重新登录时,用户名为空,需要你重新输入用户名进行登录。
③. Session是代表了浏览器和服务器的一次会话,所以只要我们的浏览器不关闭,我们始终都是一个Session对象(通过功能展示我们会发现,我们的SessionID都是同一个,除非你点注销,将Session对象销毁了,变成了一个新的SessionID);于是我们在Session这个域对象中存储数据的时候,我们就可以在另一个页面中得到那个存储的数据了。