Session对象

来源:互联网 发布:c 语言volatile关键字 编辑:程序博客网 时间:2024/05/17 23:52

一、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

<%@ page contentType="text/html" pageEncoding="GBK"%><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>

转自;http://blog.csdn.net/joywy/article/details/7749981

0 0
原创粉丝点击