1:session进行身份验证的原理:
当客户端第一次访问服务器的时候,此时客户端的请求中不携带任何标识给服务器,所以此时服务器无法找到与之对应的
session,所以会新建session对象,当服务器进行响应的时候,服务器会将session标识放到响应头的Set-Cookie中,会以
key-value的形式返回给客户端,例:JSESSIONID=7F149950097E7B5B41B390436497CD21;其中JSESSIONID是固定的,
而后面的value值对应的则是给该客户端新创建的session的ID,之后浏览器再次进行服务器访问的时候,客户端会将此key-value
放到cookie中一并请求服务器,服务器就会根据此ID寻找对应的session对象了;(当浏览器关闭后,会话结束,由于cookie消
失所以对应的session对象标识消失,而对应的session依然存在,但已经成为报废数据等待GC回收了)
对应session的ID可以利用此方法得到:session.getId();
2:session的生命周期:
比方说可以通过这样的方式使用:
3:常用方法示例:
登录界面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 SessionId:<%=session.getId() %> 12 <br><br> 13 14 IsNew:<%=session.isNew() %> 15 <br><br> 16 17 MaxInactiveInterval:<%=session.getMaxInactiveInterval() %> 18 <br><br> 19 20 CreateTime:<%=session.getCreationTime() %> 21 <br><br> 22 23 LastAccessTime<%=session.getLastAccessedTime() %> 24 <br><br> 25 26 <% 27 Object username = session.getAttribute("username"); 28 if(username==null){ 29 username=""; 30 } 31 %> 32 33 <form action="hello.jsp" method="post"> 34 35 userName:<input type="text" name="userName" value="<%=username %>"/> 36 <input type="submit" value="Submit"/> 37 38 </form> 39 40 </body> 41 </html>
展示界面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 12 SessionId:<%=session.getId() %> 13 <br><br> 14 15 IsNew:<%=session.isNew() %> 16 <br><br> 17 18 MaxInactiveInterval:<%=session.getMaxInactiveInterval() %> 19 <br><br> 20 21 CreateTime:<%=session.getCreationTime() %> 22 <br><br> 23 24 LastAccessTime<%=session.getLastAccessedTime() %> 25 <br><br> 26 27 Hello:<%=request.getParameter("userName") %> 28 <br><br> 29 30 <% 31 session.setAttribute("username", request.getParameter("userName")); 32 %> 33 34 <a href="login.jsp">重新登陆</a> 35 36 <a href="logout.jsp">注销</a> 37 38 </body> 39 </html>
注销界面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 12 SessionId:<%=session.getId() %> 13 <br><br> 14 15 IsNew:<%=session.isNew() %> 16 <br><br> 17 18 MaxInactiveInterval:<%=session.getMaxInactiveInterval() %> 19 <br><br> 20 21 CreateTime:<%=session.getCreationTime() %> 22 <br><br> 23 24 LastAccessTime<%=session.getLastAccessedTime() %> 25 <br><br> 26 27 Bye:<%=request.getParameter("userName") %> 28 <br><br> 29 30 <% 31 session.invalidate(); 32 %> 33 34 <br><br> 35 <a href="login.jsp">重新登陆</a> 36 37 </body> 38 </html>
首次进入登陆界面的时候:
在userName中输入名称Lily后点击登录:
当再次点击重新登陆时利用session进行数据回显由于session没有被注销,所以session不变:
当点击注销按钮后,登录时的session失效,原session对象被销毁:
当再次点击重新登陆或者是刷新界面后,会创建新的session: