登陆现象详解

现象1:

当登陆以后,如果继续刷新页面,次数还会不断的增加。

现象2:

如果后退,那么会显示出登陆框。此时刷新,会显示登陆信息。

//tile.jsp

  <%
   boolean isFlag = false;
   isFlag = "1".equals(session.getAttribute("flag"));
  %>
  <%
   if(isFlag)
   {
    //显示登陆用户相关信息
  %>
      欢迎光临,<%=session.getAttribute("uname")%>,您是第
      <%=session.getAttribute("ucount")%>次登陆,您上次登陆
      的时间是<%=session.getAttribute("utime")%>。
  <%
   }
  else
   {
    //显示登陆框,然后跳转到login页判断
  %>
    <form action="login.jsp" method="get">
    用户名:<input type="text" name="name">
    密码:<input type="password" name="password">
    <input type="submit" value="登陆">  
    </form>
  <%
   }
  %>

//login.jsp

<jsp:useBean id="ab" class="pro.one.Demo" scope="request">
<jsp:setProperty name="ab" property="*"/>
</jsp:useBean>
<html>
 <body> 
  <%
  /* String str1 = request.getParameter("name");
    String str2 = request.getParameter("password");
    Demo aa = new Demo();
    ab.setName(str1);
    ab.setPassword(str2);
    */
    String tt = null;
    int count = 0;
     boolean flag = false;
    
    LogDB ldb = new LogDB();
    ldb.setDemo(ab);//获得bean
    DBConnection dbc = new DBConnection();
    ldb.setDBConnection(dbc);//获得连接
    flag = ldb.isExist();//判断帐号和密码正确是否正确 
   %>
   <%
   if(flag==true)
   {
    //帐号和密码正确  
    //上一次登陆的时间及次数
    session.setAttribute("flag","1");
    
    tt = ldb.getUserLastTime();
    count = ldb.getCount();
    session.setAttribute("uname", ab.getName());
    session.setAttribute("utime",tt);
    session.setAttribute("ucount",String.valueOf(count));
    //将当前的时间放入数据库中,将获取到的次数加1放入到数据库中
    count++;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");    
    ldb.setUserLastTime(sdf.format(new Date()));
    ldb.setCount(count);
    ldb.update();
    
  %>
    <jsp:forward page="title.jsp"/>
  <%
   }
  else
   {
    //帐号和密码正确,转到错误页
   // ldb.user.getName();
   out.print(ldb.user.getName());
   out.print("<br>");
   out.print(ldb.user.getPassword());
   }   
  %>

原因:

当表单提交后,如果账号和密码正确,服务器会将title.jsp中的内容读取出来,发送到login.jsp,显示出登陆信息。

页面仍在title.jsp,如果这时候刷新(“刷新也就是一次request请求”),那么会再次执行title.jsp中的内容(count++等),因此,如果继续刷新页面,次数还会不断的增加。

“后退”是将上次的页面(title.jsp)原封不动的再显示出来,所以后退后会显示登陆框;如果刷新,那么会再次执行title.jsp中的内容,判断 isFlag = "1".equals(session.getAttribute("flag"))时,由于flag的值为“1”,所以isFlag为真,所以显示出登陆信息。

 

另注意:

如果login.jsp中Bean的scope设为request,情况不会发生任何改变。因为在第一次登陆时(无论是否成功),都会实例化 一个范围为request的对象ab存放在pageContent中。

若登陆成功后刷新页面,顺序执行到代码:

 <jsp:useBean id="ab" class="pro.one.Demo" scope="request">
<jsp:setProperty name="ab" property="*"/>
</jsp:useBean>

时,服务器首先会检查pageContent中在request范围内是否有ab实例对象,发现有,则不会再创建新的ab;而<jsp:setProperty name="ab" property="*"/>只有在bean第一次实例化时才创建,所以它也不会执行。(所以这里要注意uesBean在JSP页面加载过程是怎样的,以及jsp:setProperty赋值时的要求)



FROM:  http://blog.csdn.net/mgp1030/archive/2007/05/15/1610460.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值