• 学习jsp篇:jsp Session介绍


    1、Session基本介绍

      Session---会话,它是一个内置对象。会话打个比方说就是浏览网站:开始到结束,或者说购物从开始到结束。

    2、Session机制

      客户端在第一次请求服务端时,服务端会产生一个Session对象(用于存储客户端信息),每一个Session对象都有唯一的SessionID(区别于其他客户端),同时服务端会产生一个Cookie,并且该Cookie中有一对键值对name=JsessionID,value=SessionID。然后在响应客户端的请求时将JsessionID传给客户端,至此客户端就有了与服务端一一对应的值,即SessionID与JsessionID。

      客户端在第二次请求时,服务端会拿客户端中的JsessionID,去服务端中的Session匹配SessionID,如果匹配成功,说明该客户端不是第一次访问。然后可以直接登录开始会话。

    3、Session的服务机制

      a、Session存储在服务端中

      b、Session在同一个用户请求时共享

      c、实现机制:第一次客户端请求时产生一个SessionId并赋值给Cookie的jSessionId,然后发送给客户端,最终通过SessionId与JsessionId一一对应

    4、举个简单例子

      去超市存包,第一次去超市存包时,首先申请柜子,将你的东西放进柜子中,同时超市给你一个钥匙,该钥匙和你放东西的柜子一一对应(就像SessionID和JsessionID一一对应)。等到你第二次再去取你的东西时,不需要再申请拿钥匙,而是直接拿你手上的钥匙(JsessionID)与柜子(SessionID)一一对应打开柜子,取得你的东西。

    5、常用方法

      a、getId()获取SessionID

      b、boolean isNew() 判断是否是新用户(一般在第一次访问时使用)

      c、void invalidate()使session失效(退出登录,注销)

      d、void setAttribute()

      e、Objetct getAttribute()

      f、void setMaxInactiveInterval(时间一般为秒)最大有效(非活动时间)

      g、int getMaxInactiveInterval()获取最大有效时间(非活动时间)

    6、Session实例

    用户请求登录页面login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>登录页面</title>
    </head>
    <body>

    <form action="check.jsp" method="post">
    用户名:<input type="text" name="uname"><br/>
    密码: <input type="password" name="upwd"><br/>
    <input type="submit" name="提交"><br/>
    </form>
    </body>
    </html>

    登录之后页面,check.jsp(其实check.jsp在这相当于服务端)

    <%@ page contentType="text/html;charset=UTF-8" language="java"<htm<head>   
    <title>校验页面</title> </head> <body> <%
    //设置编码方式 request.setCharacterEncoding("utf-8");
    //获得登录的用户名和密码
    String name=request.getParameter("uname"); String password=request.getParameter("upwd");
    //校验是否登录成功
    if(name.equals("zz")&&password.equals("1111")){ //如果登录成功,开始建立session(Session一般在用户登录成功时创建) session.setAttribute("uname",name);//建立session session.setAttribute("upwd",password); //获得sessionID,并将session在控制台输出 System.out.println("sessionID"+session.getId()); //设置session有效时间 //session.setMaxInactiveInterval(10);
    //这里不用创建Cookie,服务端内部会自己创建JSessionID
    //Cookie cookie=new Cookie("uname",name);
    //response.addCookie(cookie); request.getRequestDispatcher("welcome.jsp").forward(request,response); }else{ response.sendRedirect("login.jsp"); } %> </body> </html>

    如果登录成功则进入welcome.jsp,否则跳回登录页面login.jsp

    welcome.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
          欢迎您:
              <%
                  String name=(String)session.getAttribute("uname");
    
                  if(name==null){
                      response.sendRedirect("login.jsp");
    
                  }else {
                      out.println(name);
                  }
              %>
              <a href="invalidate.jsp">注销</a>
    </body>
    </html>

    在welcome中加入注销功能,用<a href="invalidate.jsp">注销</a>语句

    invalidate.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
         <%
             session.invalidate();//session失效
             response.sendRedirect("login.jsp");
             //session.removeAttribute("uname");//部分失效
         %>
    </body>
    </html>

    再建一个客户端页面A.jsp,在登录之后,输出下客户端的JsessionId,看和之前的SessionId是否相等

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
          
    <%
    //同一个服务端有效
        %>
    <%=session.getAttribute("uname")%> <% Cookie cookie[]=request.getCookies(); for(Cookie cookie1:cookie){ //验证SessionID和JSESSIONID相等 if(cookie1.getName().equals("JSESSIONID")) System.out.println("JSESSIONID"+cookie1.getValue()); } %> </body> </html>

     7、Session与Cookie的区别

      session cookie
    保存位置 服务端 客户端
    安全性
    保存内容形式 Object String

    8、总结下boby中代码格式

      a、<%=%>输出运算符

      b、<% !%>全局变量

      c、<% %>代码运算符

    9、常见状态码

      a、404 资源不存在

      b、403 权限不足

      c、200 一切正常

      d、300/30 页面重定向

      e、500 服务器代码有误

  • 相关阅读:
    Undefined symbols for architecture armv7: "CreateRSADataVerifier(NSString*)", referenced from:
    iOS 多线程研究11
    iOS 多线程研究
    iOS 中谓词的使用 NSPredicate
    ios 进程间通信
    GCD Block最简单的用法
    tabbar 获得对应的视图对象的方法
    网络请求
    iOS手势 规避同一界面上不同子界面同时响应多个手势
    20171107 几天考试总结
  • 原文地址:https://www.cnblogs.com/ym77/p/11323742.html
Copyright © 2020-2023  润新知