session对象

时间:2024-04-09 10:17:02

本章目标
掌握session的主要作用
掌握session的常用操作方法

 

session对象
在前面讲解四种属性范围的时候,已经为读者介绍了session对象的使用,实际上在开发中session对象最主要的用处就是完成用户的登陆(login)、注销(logout)等常见功能的,每一个session对象都表示不同的访问用户,session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能应用在HTTP协议中。

HttpSession接口的主要方法
session对象
 

取得Session Id
当一个用户连接到服务器之后,服务器会自动为此session自动分配一个不会重复的Session Id,服务器依靠这些不同的Session Id来区分每一个不同的用户,在WEB中可以使用HttpSession接口中的getId()方法取得这些编号。

 

取得Session Id

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>取得Session Id</title>
</head>
<body>
<%
	String id=session.getId();//取得Session Id
 %>
 <h3>SESSION ID:<%=id %></h3>
 <h3>SESSION ID长度:<%=id.length() %></h3>
</body>
</html>

 效果图:
session对象

 

通过序列化的方式保存session
在Tomcat中可以通过配置server.xml文件,将每一个用户的session在服务器关闭时序列化到存储介质(存储介质可以是文件或数据库)上保存,这样即使服务器重新启动了,也可以通过反序列化的方式,从指定的存储介质上反序列化session。

 

配置server.xml文件,加入session保存操作

<Context path="/mldn" docBase="D:\mldnwebdemo">
  <Manager className="org.apache.catalina.session.PersistentManager">
  debug=0   saveOnRestart="true"
  maxActiveSession="-1"   minIdleSwap="-1"
  maxIdleSwap="-1"   maxIdleBackup="-1"
  <Store className="org.apache.catalina.session.FileStore" directory="d:\temp"/>
  </Manager>
</Context>


属性作用:
className:session的管理器操作类,Tomcat通过此接口完成序列化管理;
debug:Session管理器的跟踪级别;
saveOnRestart:配置服务器重新启动前对session的处理,可以配置true或false两中选项,如果为true则会在容器关闭前将有效的session保存,重新启动后重新载入;
maxActiveSession:可以活动的session的最大数,如果设置为-1,则表示不受限制,超过最大限制会将session对象转移到Session Store中;
minIdleSwap:一个session不活动的最短时间,单位为秒,如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中;
maxidleSwap:一个session不活动的最长时间,单位为秒,如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中,该session不在内存中保存;
maxidleBackup:session的最长时间,单位为秒,如果设置为-1,则表示不受限制,超过该时间会将session对象备份到Session Store之中,但该Session对象依然存在于内存之中。
<Store>元素:定义实现持久化session的操作类及指定的文件存放位置,本程序将序列化的session保存在了“d:\temp”文件夹之中,每一个保存的session都是通过文件保存的,文件的命名规范是“sessionid.session”。

 

登陆及注销
在各个的系统中几乎都会包括用户登陆验证及注销的功能,那么此功能就完全可以使用session实现,具体的思路是:当用户登陆成功之后,设置一个session范围的属性,之后在其他需要验证的页面中判断是否存在此session范围的属性,如果存在,则表示已经是正常登陆过的合法用户,如果不存在,则给出提示,并跳转回登陆页提示用户重新登陆,用户登陆之后可以进行注销的操作。

 

程序列表
session对象
 

编写表单并执行验证

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>编写表单并执行验证</title>
</head>
<body>
<form action="login.jsp" method="post">
	用户名:<input type="text" name="uname"><br />
	密&nbsp;&nbsp;码:<input type="password" name="upass"><br />
	<input type="submit" value="登录">
	<input type="submit" value="重置">	 
</form>
<%
	String name=request.getParameter("uname");//取得name的信息
	String password=request.getParameter("upass");//取得password的信息
	if(!(name==null||"".equals(name)||password==null||"".equals(password))){//进行用户名和密码的验证
		if("chaoyi".equals(name)&&"123456".equals(password)){
			response.setHeader("refresh", "2;URL=welcome.jsp");//定时跳转
			session.setAttribute("userid", name);//将登录的用户名保存在session中
%>
			<h3>用户登陆成功,两秒后跳转到欢迎页!</h3>
			<h3>如果没有跳转,请按<a href="welcome.jsp">这里</a></h3>
<%
		}else{//登录失败给出的错误信息
%>
			<h3>错误的用户名或密码!</h3>
<%		
		}
	}
 %>
</body>
</html>

效果图:
session对象
session对象
 

 

欢迎页

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>欢迎页</title>
</head>
<body>
<%
	if(session.getAttribute("userid")!=null){//已经设置过属性,所以不为空
%>
	<h3>欢迎<%=session.getAttribute("userid") %>光临本系统,<a href="logout.jsp">注销</a>!</h3>
<% 
	}else{//非法用户,没有登录过,则session范围没有属性存在
%>
	<h3>请先进行系统的<a href="login.jsp">登录</a>!</h3>
<%
	}
 %>
</body>
</html>

 效果图:
session对象
 
 登录注销

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>登录注销</title>
</head>
<body>
<%
	response.setHeader("refresh", "2;URL=login.jsp");//定时跳转
	session.invalidate();//注销
 %>
 <h3>你已成功退出本系统,两秒后跳转回首页了!</h3>
 <h3>如果没有跳转,请按<a href="login.jsp">这里</a></h3>
</body>
</html>

 效果图:
session对象
 

 判断是否是新的用户

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>登录注销</title>
</head>
<body>
<%
	if(session.isNew()){//用户是第一次访问
%>
		<h3>欢迎新用户光临!</h3>
<%	
	}else{//用户再次访问页面
%>
	<h3>您已经是老用户了!</h3>
<%	
	}
 %>
</body>
</html>

 效果图:
session对象

取得用户的操作时间

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%
	long start=session.getCreationTime();//取得创建时间
	long end=session.getLastAccessedTime();//取得最后一次操作时间
	long time=(end - start)/1000;//得出操作的秒
%>
<h3>你已经停留了<%=time %>秒!</h3>

效果图:
session对象
小结
session对象最主要的功能就是用于登陆验证操作
当用户第一次连接到服务器上时会自动分配一个新的session id