JSP内置对象session对象
浏览器与web服务之间使用的是HTTP协议进行通信的,HTTP协议是一种基于请求/响应模式的无状态的访问协议。“无状态”就是指每一个HTTP请求都是独立的。服务器不会保存以往的请求和会话记录。因此当一个客户端发送请求到Web服务器时,无论第一次是否来访,服务器都会把它当成第一次来对待。而在实际开发过程中我们都希望能够识别已经访问的客户端,也就是一个用户的活动会有多次请求和响应,作为服务器呢,必须有一种机制来唯一标识一个用户,同时记录该用户的状态信息。这就是会话跟踪机制,该机制可以保持每个用户的会话信息,为不同的用户保存自己的数据。
什么是会话?
session 一词的原义是指有始有终的一系列操作,在实际开发中通常会被翻译成会话。比如甲和乙打电话,挂断电话是会话就会结束。对Web来说一个会话就是在一段时间内,一个用户与Web服务器的一连串相关的交互过程,它可以包含浏览器与服务器之间的多次请求,响应过程。在一次会话中,用户可能会多次请求访问一个网页,也可能请求访问同一个服务器的其他资源。
会话机制是一种服务器的机制,,当用户向服务器发出第一次请求时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束。
当服务器接收到客户端请求时,服务器首先会判断是否已经创建了与该客户端对应的会话。如果已经创建,就将该请求与此会话相关联。如果没有创建,则创建一个新会话,此客户端之后发送的请求将关联到该会话。
而服务器判断是否创建了相关会话,是通过一个唯一的标识sessionid来实现的。如果在客户端请求中包含了一个sessionid,则说明在此前已经为客户端创建了会话,服务器就会根据这个sessionid将对应的会话对象读取出来;否则就会创建一个新的会话对象并生成一个sessionid,并将sessionid在本次响应的过程中返回客户端保存。
问答: 问 session会返回客户端,那么再客户端sessionid会保存在什么位置?
答;在客户端保存用户信息使用的是cookie,因此保存sessionid的方式也是使用cookie来实现的。在客户端的cooike中,保存sessionid的名称是JESSIONID ,sessionid的值是由一串复杂字符串组成的,而cookie将下面再说。
session对象
作为JSP提供内置对象之一,session对象允许用户访问会话的相关信息,以及绑定数据会到会话(在服务器端使用类类似于哈希表的结构来保存信息)。绑定到会话的数据可以在多次请求之间持续有效。session对象的常用方法如下。
方法名称 | 说明 |
---|---|
String getId() | 获取sessionid |
void setMaxInactiveInterval(int interval) | 设定session的非活动时间 |
int getMaxInactiveInterval() | 获取session的有效非活动时间,以秒为单位 |
void invalidate() | 获取session对象失效 |
void setAttributes(String key,Object value) | 以key/value的形式将对象保存到session中 |
Object getAttribute(String key) | 通过key获取session中保存的对象 |
void removeAttribute(String key) | 从session中删除指定key对应的对象 |
session对象实现权限控制
我们要实现权限访问控制是基于Session对象来完成的。
<%
if("".equalse()){
//设置用户登录信息
session.setAttribute("login",name);
//设置session过期时间
session.setMaxInactiveInterval(10*60);
}
%>
<%
String login=(String)session.getAttribute("login");
if(login==null){
response.sendRedirect("index.jsp");
return;
}
%>
提示:session是JSP内置对象,无须通过new关键字创建。
session.setAttribute(String key,Object value)中的参数value 是Object类型。
session.getAttribute(String key)方法的返回值是一个Object,必须进行强制类型转换。
会话的失效
会话也是有失效的,使会话失效的方式有两种:一种是会话超时,另一种是手动调用方法设置失效。
会话超时是指,两次请求的时间间隔超过了服务器允许的最大时间间隔。会话的超时间隔可以通过三种方法设置。
(1)通过session对象的setMaxInactiveInterval()方法设置。
<%
session.setAttribute("login","admin");
session.setMaxInactiveInterval(600);
response.sendRedirect("admin.jsp");
%>
(2) 在项目的web.xml中设置代码段如下。
10
单位是分钟,设置为0或负数,表示永远不超时。
(3) 在应用服务器中设置,在Tomcat目录/conf/web.xml中找到元素,其中元素中的30就是默认的时间,单位是分钟,可以修改其值。
手动调用方法设置失效是通过调用session对象的invalidate()方法实现的,主要应用于用户注销的场合。但如果想清空会话中绑定的某个数据对象,则可以调用session.removeAttribute(String key)方法,将指定的对象从会话中清除,而会话仍然有效。