02---jsp内置对象04(session对象)

本文详细介绍了HTTP Session的概念,包括如何获取Session ID、Session的创建与操作时间、判断新用户、登陆验证及注销功能,并探讨了Session的生命周期与序列化机制。此外,文章还展示了如何使用Session进行用户验证,以及四种回话跟踪技术的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中,本身最重要的部分是属性的操作,但是对属相的操作除了
一组:setAttribute()、getAttribute()、removeAttribute()之外,还有一些过时的操作;

1、session id
  对于每一个用户而言,实际上都表示一个个不同的session,那么服务器是靠什么区分
 这些用户的就是靠session id,即:每一个通过浏览器连接到服务器上的用户都会由
 服务器自动的分配一个唯一的不会重复的编号;
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%
    String id=session.getId();//得到session id;
   %>
   <h1>SESSION ID:<%=id%></h1> 
   <h1>SESSION ID长度:<%=id.length()%></h1> 
  </body>
  </html>
  每一个连接到服务器上的session id是完全不同的,所以服务器就是这些完成的,但是需要
 注意,对于id的操作并不是成对的,因为在正常情况下如果存在了get方法就有set方法;
  其实之前所说cookie时,自动设置的那个cookie就是每一个用户的session id,所以
 session在进行操作的时候用到了cookie的处理机制;
  但是对于session的操作有一点也必须说明的是,如果现在服务器关闭了,则session id
 则肯定重新分配;测试方法,创建可以得到session id的jsp界面 ,通过浏览器打开,
 这是会在界面上输出一个session id,这是关闭tomcat 删掉tomcat中的临时文件,启动tomcat,刷新
 刚才的那个jsp界面,发现session id 变了,所以说服务器重新启动后,session id重新分配;

  如果用户想关闭服务器后session id也可继续保留,那么就需要使用到序列化的机制;
  所谓的对象序列化,指的是一个对象通过二进制保存或进行传输,而且对象所在的类
 必须实现java.io.Serializable接口,对于session本身也可以完成这种序列化的操作,
 但是它不是手工完成的,而是需要配置完成,在server.xml中完成;
  <Context path="/lid" docBase="D:\javaeedemo">
   <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>

2、登陆及注销:
 session在所有的项目开发中用的最多的地方是登陆验证及注销操作功能。
 程序列表:
  login.jsp 完成登陆表单的显示,同时向页面本身进行数据提交,已完成登陆;
  welcome.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>
    密 &nbsp;&nbsp;码:<input type="password" name="upass"/><br>
    <input type="submit" value="登陆"/>
    <input type="reset" value="重置"/>
   </form> 
   <%//直接通过一个固定的用户名和密码
    String name=request.getParameter("uname");
    String password=request.getParameter("upass");
    if(!(name==null||"".equals(name)||password==null||"".equals(password))){
     if("lid".equals(name)&&"123".equals(password)){
      //如果登陆成功,则设置session属性范围
      session.setAttribute("username",name);
      response.setHeader("refresh","2;URL=welcome.jsp");
   %>
     <h2>登陆成功,2秒后跳转到欢迎界面</h2>
     <h2>如果没有跳转,请按<a href="welcome.jsp">这里</a>!</h2>
   <%
     }else{
   %>
     <h2>用户名或密码错误</h2>
   <% 
     }
    }
   %>
  </body>
  </html>
 welcome.jsp:
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%
    if(session.getAttribute("username")!=null)
    {
   %>
    <h1>欢迎<%=session.getAttribute("username")%>光临本系统,<a href="logout.jsp">注销</a></h1>
   <%
    }else{
   %>
    <h1>请进行系统的<a href="login.jsp">登陆</a></h1>
   <% 
    }
   %> 
  </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
   %>
   <h1>您已成功退出本系统,2秒钟之后跳回到首页</h1>
   <h1>如果没有跳转请按<a href="login.jsp">这里</a></h1>
  </body>
  </html>
 以上的做法属于session使用最多的一种验证,可是除了这些之外,对于回话跟踪
 还有一下四种技术:
  ·通过session提供的方法保存
  ·通过cookie
  ·通过表单的隐藏域
  ·通过地址重写

3、判断新用户;
 在session的方法中有个isNew()方法判断一个用户是否是第一次访问页面;
  <%@ page contentType="text/html" pageEncoding="gbk"%>
  <html>
  <head><title>这是测试</title></head>
  <body>
   <%
    if(session.isNew()){
     <h3>欢迎新用户光临</h3>
   %>
   <%
    }else
    {
   %>
    <h3>您已经是老用户了</h3>
   <% 
    }
   %>
   <h1></h1> 
  </body>
  </html>

4、取得用户的操作时间:
 <%@ 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;
  %>
  <h1>您已经停留了<%=time%>秒</h1> 
 </body>
 </html>

注:session指的是会话,而会话指的是 从打开浏览器到关闭该浏览器(关闭浏览器不是指
 的关闭一个网页,而是指的关闭所有的网页---结束浏览器进行);打开不同的浏览器
 代表不同的会话;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzuld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值