最近在学java web部分,一开始对Session的整个知识结构比较困惑,查阅一些资料后结合自己的理解做一下整理总结,作为初学者,若理解有误,欢迎指正。

1、Session的概念

代表服务器与浏览器的一次会话过程,是常用的会话跟踪技术。在Servlet当中session就是HttpSession对象。session是一个容器,可以存放会话过程中的任何对象。

2、Session被创建的时机

我一开始和很多人一样以为一旦客户端访问就会生成session对象,后看发现其实Session的创建时机分为以下两种:

)在Servlet中调用getSession()方法:

   HttpSession session = request.getSession();

或者

   HttpSession session = request.getSession(true);

)JSP页面默认<%@page  session=”true”%>

jsp页面上指定SP页面默认<%@page  session=”false”%>那么在JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);那么session对象就会被创建。

JSP页面没有显式禁止session,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session对象,因为session会消耗内存资源,所以在不打算使用session时,应该在所有的JSP中使用<%@page  session=”false”%>将其关闭。

3、Session ID

session对象创建的时候,同时也会为该对象分配一个唯一的标识符Session ID,当客户端之后对服务器再发送HTTP请求的时候,服务器先从HttpServletRequest对象中读取Session ID,找到之前创建的sesion对象。

是cookie的形式保存在浏览器端。

4、Session删除的时间:

1)Session超时:超时指的是连续一定时间服务器没有收到该session所对应客户端的请求,并且这个时间超过了服务器设置的session超时的最大时间。服务器会将该session对象清除;

2)程序调用HttpSession.invalidate();

3)服务器关闭或服务停止;

需要注意的是session不会因为浏览器的关闭而删除。

session的创建和使用都是在服务端,而浏览器从来都没得到过session对象。但浏览器可以请求Servlet或者JSP来获取session中保存的信息。