Session内置对象
JSP内置对象Session,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。
HttpSession对象
HttpSession是由JavaWeb提供用来会话跟踪的类,Session是服务器端对象,保存在服务器,它的底层是依赖Cookie,或者是URL重写。会话跟踪技术中的session技术,是指使用HttpSession对象实现会话跟踪,是一种在服务器端保持会话跟踪的解决方案。
-
Servlet提供了使用HttpSession接口来实现session跟踪,它是建立在Cookie和URL重写之上的高级接口。使用Cookie的前提是浏览器支持Cookie,若浏览器不支持Cookie或者Cookie被禁用,则使用URL重写,而使用URL重写需要添加附属信息,存在很大的安全漏洞,但使用Servlet不存在这样的问题,Servlet会自动提供数据的存储空间并将其和session关联起来。
-
HttpSession对象将在用户第一次访问服务器时由容器创建(只访问JSP、Servlet等程序时才会创建,只访问HTML、image等静态资源并不创建),当用户调用其失效方法(invalidate()方法)或超过其最大不活动时间时会失效。
1、创建session
-
若当前的JSP是客户端访问的当前WEB应用的第一个资源,且JSP的page指定的session属性值为 false, 则服务器就不会为JSP创建一个 HttpSession对象。
-
若当前JSP不是客户端访问的当前WEB应用的第一个资源,且其他页面已经创建一个HttpSession 对象,则服务器也不会为当前 JSP 页面创建一个HttpSession对象,而回会把和当前会话关联的那个HttpSession对象返回给当前的JSP页面。
-
若Serlvet是客户端访问的第一个WEB应用的资源, 则只有调用了request.getSession()或request.getSession(true)才会创建 HttpSession对象。
2、获取session
-
获取cookie中的request.getSession()方法,获取Cookie中的SessionId;
-
如果SessionId不存在,创建Session,把Session 保存起来,把新创建的SessionID保存到cookie中;
-
如果SessionId存在,通过SessionId查找Session对象,如果没有查找到,创建Session,把Session保存到新创建的SessionId的cookie中。
3、销毁session
-
直接调用 HttpSession 的 invalidate() 方法, 该方法使 HttpSession 失效。
-
服务器卸载了当前 WEB 应用。
-
超出 HttpSession 的过期时间。
设置 HttpSession 的过期时间: session.setMaxInactiveInterval(5); 单位为秒
在 web.xml 文件中设置 HttpSession 的过期时间: 单位为分钟.