部分内容摘自网络。
1.概述:
--》HttpSession是由JavaWeb提供的。用来会话跟踪的类,session是保存在服务器端,是服务器端对象;
--》HttpSession是servlet三大域对象(request、session【一个用户一个session,关闭浏览器会话结束】、application)之一,所以它有setAttribute(),getAttribute(),removeAttribute();
--》HttpSession底层依赖cookie,或是URL重写。
2.HttpSession的作用
--》会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束;会话是用户对服务器的多次连贯性请求,用户在多次请求的过程中并没有关闭浏览器。
--》服务器会为每个用户创建一个session对象,session就像是保存在服务器端的客户账户,他们被保存到一个map中,这个map被称为session缓存。
servlet中得到的session对象:HttpSession session = request.getSession();
jsp中得到session对象:session是jsp内置对象之下,不用创建就可以直接使用。
--》session域相关方法:
void setAttribute(String name,object value);
Object getAttribute(String name);
void removeAttribute(String name);
3.HttpSession的原理
(1)request.getSession()方法:
--》获取cookie中的sessionId:
当请求服务器时,如果JSESSIONID不存在(没有银行卡),创建session,把session保存起来,把新创建的sessionId保存到cookie中;
如果sessionId存在,通过sessionId查找session对象,如果没有查到(如果30分钟内并没有请求拿着这个sessionId来找服务器,那么服务器会将这个Session从服务器中去掉),创建session,把session保存起来,把新创建的sessionId保存到cookie中;
如果sessionId存在,通过sessionId找到了session对象,那么就不会再创建新的session对象了;
返回session。
--》如果创建了新的session,浏览器会得到一个包含了sessionId的cookie,这个cookie的生命周期为-1(即关闭浏览器,该cookie就没有了,也表明会话结束),即只在浏览器内存中存在,如果不关闭浏览器,那么cookie就一直存在;
--》下次请求时,在执行request.getSession()方法时,因为可以通过cookie中的sessionId找到session对象,所以与上一次请求中使用的是同一session对象。
(2)服务器不会马上给你创建session,在第一次获取session时,才会创建,request.getSession();
(3)request.getSession (false),request.getSession(true),request.getSession().后面两个方法效果相同,第一个方法中,如果session缓存中不存在session,那么会返回null。而不会创建session对象。
在jsp页面中,即使没有request.getSession()方法,在请求该jsp页面时,服务器也会创建session并把sessionId存到cookie中发送到客户端,所以说session是jsp的内置对象;
在servlet中,没有request.getSession(),如果在地址栏中直接请求该servlet服务,不会创建session,只有使用了request.getSession(true)或者request.getSession()才会创建session。
public class SessionTest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.getSession();//如果没有此行,那么在地址栏中请求该servlet时并不会创建session。
PrintWriter out = response.getWriter();
out.print("获取session,看有没有。");
}
}
This is my JSP page.
4.HttpSession其他方法:
5.URL重写(理解)
如果浏览器中禁用cookie,那么可以通过另一种办法来想服务器传递sessionId,那就是通过URL重写的方式。
> 该方法会对url进行智能的重写:当请求中没有归还sessionid这个cookie,那么该方法会重写url,否则不重写!当然url必须是指向本站的url。