分针网——每日分享:Session对象

领取免费IT资料 加群:272292492
更多文章:www.f-z.cn

一、Session对象


session对象最主要的用处就是完成用户的登录(login)、注销(logout)等常见功能的,每一个session对象都表示不同的访问用户,session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能应用在HTTP协议中。

二、HttpSession接口的主要方法

Public String getId() //取得SESSION ID
Public long getCreationTime() //取得SESSION的创建时间
Public long getLastAccessedTime() //取得SESSION的最后一次操作时间
Public boolean isNew //判断是否是新的SESSION(新用户)
Public void invalidate() //让SESSION失效
Public Enumeration getAttributeNames() //得到全部属性的名称

三、Session ID

取得Session id

当一个用户连接到服务器之后,服务器会自动为此session自动分配一个不会重复的Session Id,服务器依靠这些不同的Session Id来区分每一个不同的用户,在WEB中可以使用HttpSession接口中的getId()方法取得这些编号。
  
  
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head> <title>欢迎 </title> </head>
<body>
<%
String id = session.getId();
%>
<h3>SESSION ID:<%=id%> </h3>
<h3>SESSION ID长度:<%=id.length()%> </h3>
</body>
</html>

session在进行操作的时候使用到了cookie的处理机制 ,有一点必须说明的是,服务器关闭后,session id肯定需要重新分配,若想使服务器关闭后,session id也可以继续保留,那么就需要使用到了序列化的机制。

所谓的对象序列化指的是一个对象通过二进制保存或进行传输,而且对象所在的类必须实现Java.io.Serializable接口,对于session本身也可以完成这种序列化的操作,但他不是手工完成的,而是需要自动配置完成,这个配置需要在server.xml中完成。
  
  
<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 >

注:
配置中元素是专门用来配置session管理操作的,该元素中每个属性的作用如下:

1.className:session的管理器操作类,Tomcat通过此接口完成序列化管理。

2.debug:session管理器的跟踪级别

3.saveOnRestart:配置服务器重新启动前对session的处理,可以配置true或false两种选项,如果为true则会在容器关闭前将有效的session保存,重新启动后重新载入。

4.maxActiveSession:可以活动的session的最大数。如果设置为-1,则表示不受限制,超过最大限制会将session对象转移到Session Store中。

5.minIdleSwap:一个session不活动的最短时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中。

6.maxIdleSwap:一个session不活动的最长时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中,该session不再内存中保存。

7.maxIdleBackup:session的最长时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象备份到Session Store中,但该session对象依然存在于内存中。

8.元素:定义实现持久化session的操作类及指定的文件存放位置。本程序将序列化的session保存在”d:\temp”文件夹中,每一个保存的session都是通过文件保存的,文件的命名规范是sessionid.session。

以上配置完成后,即使服务器中间关闭了,一个用户的session也可以通过此配置进行反序列化的恢复。

四、登录及注销

Login.jsp:完成登录表单的显示,同时想页面本身进行数据提交,以完成登录的验证,如果登录成功(用户名和密码固定:Joywy/1111),则保存属性;如果登录失败,则显示登录失败的信息。
Welome.jsp:此页面要求在用户登录完成之后才可以显示登录成功的信息,如果没有登录,则要给出未登录的提示,同时给出一个登陆的连接地址。
logout.jsp:此功能完成登录的注销,注销之后,页面要跳转会login.jsp,等待用户继续登录。
login.jsp
  
  
<html>
<head> <title>欢迎 </title> </head>
<body>
<form action="login.jsp" method="post">
用户名: <input type="text" name="uname"> <br>
密 码: <input type="password" name="upass"> <br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
<%
String name = (String)request.getParameter("uname");
String password = (String)request.getParameter("upass");
if(!(name == null || "".equals(name) || password == null || "".equals(password))){
if("Joywy".equals(name) && "android".equals(password)){
//如果登录成功,则设置session的属性范围
session.setAttribute("userid", name);
response.setHeader("refresh", "2, URL=welcome.jsp");
%>
<h3>用户登录成功!两秒后跳转到欢迎页…… </h3>
<h3>如果没有跳转,请按 <a href="welcome.jsp">这里 </a> </h3>
<%
}else{
% >
<h3>错误的用户名或密码! </h3>
<%
}
}
% >
</body>
</html>

welcome.jsp
  
  
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head> <title>欢迎 </title> </head>
<body>
<% //如果已经设置过了session属性,则肯定不为空
if(session.getAttribute("userid") != null){
%>
<h3>欢迎<%=session.getAttribute("userid")%> <a href="logout.jsp">注销 </a> </h3>
<%
}else{
% >
<h3>请先进行本系统的 <a href="login.jsp">登录 </a> </h3>
<%
}
% >
</body>
</html>

logout.jsp
  
  
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head> <title>欢迎 </title> </head>
<body>
<%
response.setHeader("refresh", "2, URL=login.jsp");
session.invalidate(); //注销表示当前的session失效
%>
<h3>你已成功退出本系统,两秒后返回到首页! </h3>
<h3>如果没有跳转,请按 <a href="login.jsp">这里 </a> </h3>
</body>
</html>

会话跟踪还有以下的四种技术:
1.通过session提供的保存

2.通过Cookie

3.通过表单的隐藏域完成

五、判断新用户


在session的对象中可以使用isNew()方法判断一个用户是否是第一次访问页面
  
  
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head> <title>欢迎 </title> </head>
<body>
<%
if(session.isNew()){
% >
<h3>欢迎新用户光临! </h3>
<%
}else{
% >
<h3>您已经是老用户了! </h3>
<%
}
% >
</body>
</html>

六、取得用户操作时间


如果要想取得一个session的具体的操作时间,可以通过计算方法取得。
  
  
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head> <title>欢迎 </title> </head>
<body>
<%
long start = session.getCreationTime();
long end = session.getLastAccessedTime();
long time = (end - start) / 1000;
%>
<h3>您已经停留了<%=time%>秒 </h3>
</body>
</html>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值