javaWeb---HttpSession

部分内容摘自网络。

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其他方法:
--》String getId():获取sessionId;
--》 int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session;
--》void invalidate():让session失效!调用这个方法会被session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId;
--》boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。

5.URL重写(理解)

如果浏览器中禁用cookie,那么可以通过另一种办法来想服务器传递sessionId,那就是通过URL重写的方式。

就是把所有的页面中的路径,都使用response.encodeURL("..")处理一下!
--》session依赖Cookie,目的是让客户端发出请求时归还sessionId,这样才能找到对应的session
--》 如果客户端禁用了Cookie,那么就无法得到sessionId,那么session也就无用了!
--》 也可以使用URL重写来替代Cookie
    > 让网站的所有超链接、表单中都添加一个特殊的请求参数,即sessionId
    > 这样服务器可以通过获取请求参数得到sessionId,从而找到session对象。

    > 该方法会对url进行智能的重写:当请求中没有归还sessionid这个cookie,那么该方法会重写url,否则不重写!当然url必须是指向本站的url。

javaWeb---HttpSession_第1张图片







你可能感兴趣的:(java)