jsp之session对象

1,什么是session?

实际开发中session对象最主要的用处就是完成用户的登录和注销等常见功能;每一个session都代表不同的用户;

session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能在Http协议中使用;它的常用方法如下:

NO 方法类型描述
1public String getId()普通取得session id
2public long getCreationTime()普通取得session的创建时间
3public long getLastAccessedTime()普通取得session的最后一次操作时间
4public boolean isNew()普通判断是否是新的session(新用户)
5public void invalidate()普通让session失效
6public Enumeration getAttributeNames()普通得到全部属性的名称

在HttpSession接口中最重要的部分还是属性操作,主要是可以完成用户登录的合法性验证;

2,取得session Id

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

Java代码   收藏代码
  1. <%  
  2.     String id = session.getId();  
  3.  %>  
  4.  Session ID:<%=id %><br />  
  5.  session ID Length:<%= id.length() %><br />  

 输出结果是:

Session ID:6111EC4EBBDDC1DFABD9BBB81EBD20CB
session ID Length:32

   这里的sessionId和cookie的JSESSIONID用处是一样的,为了区分,在使用session操作时实际上都使用了Cookie的处理机制,即在客户端的Cookie中保存每一个session Id,这样用户在每次发出请求时都会将此Session id发送到服务器端,服务器依靠此Session id区分每一个不同的客户端;

   在使用session时,要注意:对于每一个已连接到服务器上的用户,如果重新启动服务器,则这些用户再次发出请求实际上表示的都是一个新连接的用户,服务器会为每个用户重新分配一个新的session Id。

3,使用session

session是否可以在服务器重启后继续使用?在应用中,如果服务器重新启动,则已经分配的session Id就会消失,那么如何才能让这些session继续保存,等待服务器重新启动后继续使用呢?可以通过序列化的方式保存session继续使用,在tomcat服务器里可以通过配置server.xml文件,将每一个用户的session在服务器关闭时序列化到存储介质中(数据库也可,文件也可)这样即使服务器重新启动,也可以通过反序列化的方式,从指定的存储介质上反序裂化session;

配置server.xml:

Xml代码   收藏代码
  1. <Context path="/keith" docBase="/home/keith">  
  2.    <Manager className="org.apache.catalina.PersistentManager">  
  3.        debug=0                        saveOnRestart="true"  
  4.        maxActiveSession="-1"     minldleSwap="-1"  
  5.        maxldleSwap="-1"            maxldleBackup="-1"  
  6.        <Store className="org.apache.catalina.session.FileStore" directory="/home/keith/temp"  
  7.  / /   </Manager>  
  8. </Context>  

标签<Manager>元素是专门来配置session管理操作的,该元素中每个属性对应的值:

  • className:session的管理器操作类,Tomcat通过此接口完成序列化管理
  • debug:session管理器的跟踪级别
  • saveOnRestart:配置服务重新启动前对session的处理,可以配置true或者false两种选择,为true则会在容器关闭前将有效的session保存,重新启动后重新载入
  • maxActiveSession:可以活动的session的最大数,如果设置为-1,则表示不受限制,超过最大限制会将session对象转移到Session store中。
  • minIdleSwap:一个session不活动的最短时间,单位为秒;如果为-1则表示不受限制,超过该时间会将session对象转移到Session store中。该session不再内存中保存;
  • maxIdleBackup:session的最长时间,单位为秒,如果为-1,则表示不受限制,超过该时间会将session备份到session store中,但该session对象依然存在内存中;
  • <store>元素:定义实现持久化session的操作类及指定的文件存方位置;

配置server.xml,即使服务器中间关闭了,一个用户的session也可以通过此配置进行反序列华的恢复;

4,session实例---登录及注销

login.jsp:

Java代码   收藏代码
  1. <form action="login.jsp" method="post">  
  2.     userName:<input type="text" name="uname"><br />  
  3.     uPwd:<input type="text" name="upwd"><br />  
  4.     <input type="submit" value="Login">  
  5.     <input type="reset" value="Reset">  
  6. </form>  

 login.jsp:

Java代码   收藏代码
  1. <body>  
  2.     <%  
  3.     String name = request.getParameter("uname");  
  4.     String upwd = request.getParameter("upwd");  
  5.     if(name != null || !"".equals(name) || upwd != null || !"".equals(upwd)){  
  6.         //定时跳转  
  7.         session.setAttribute("userid",name);  
  8.         response.setHeader("refresh","2;URL=weclome.jsp");  
  9.  %>  
  10.     <h2>如果没有跳转,<a href="weclome.jsp">请点击这里:</a></h2>  
  11.  <% } else{ %>  
  12.     输入信息不合法  
  13.  <%} %>  
  14. </body>  

 weclome.jsp:

Java代码   收藏代码
  1. <body>  
  2. <%  
  3.     if(session.getAttribute("userid")!=null){  
  4.  %>  
  5.  <h2>欢迎:<%=session.getAttribute("userid") %></h2>  
  6.     <a href="logout.jsp">注销</a><br>  
  7.  <%  
  8.     }else{  
  9.   %>  
  10.   <%=session.getAttribute("userid") %>  
  11.     请先进行合法登录!<a href="index.jsp">登录</a>  
  12.   <%} %>  
  13. </body>  

 测试下!

判断新用户:

Java代码   收藏代码
  1. <%  
  2. if(session.isNew()){  
  3. %>  
  4.     <h2>欢迎新用户!!!</h2>  
  5. <%}else {%>  
  6.     <h2>您已经是老用户了!!!</h2>  
  7. <%} %>  

 第一次访问的话,会显示欢迎新用户,如果再次刷新一次,则显示老用户!isNew()是通过Cookie方式进行判断的(在之前的操作中,第一次通过request取得全部Cookie时是不会出现JESSINOID的,而第二次却会出现这个系统内建的JSESSIONID,这是由于Cookie是在第一次访问时由服务器端设置客户端的,所有服务器可以依靠是否存在JSESSIONID来判断此用户是否为新用户)。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值