JSP数据交互(一 session对象)

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)方法,将指定的对象从会话中清除,而会话仍然有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值