Session对象

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值