zoukankan      html  css  js  c++  java
  • JavaEE session机制

    JavaEE session机制

    Http协议:

         在讲session之前,必须说下Http协议,HTTP是一个client和server端请求和应答的标准(TCP)。由HTTPclient发起一个请求,建立一个到server指定port(默认是80port)的TCP连接。HTTPserver则在那个port监听client发送过来的请求。一旦收到请求,server(向client)发回一个状态行,比方"HTTP/1.1200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其他一些信息。

         也就是Http协议是无状态保持功能的,所以我们说下我们的session机制,就是为了保存相应浏览器的身份识别功能的。

     

    Session技术:
        1,什么是session(会话)
          在server端维护用户状态的一种状态管理技术,事实上现过程:当浏览器发给你文server时,server会创建一个对象(称为session对象),
          该对象有一个唯一的id号(称为sessionId),然后,server在默认情况下,会使用cookie技术,将sessionId发送给浏览器,
          浏览器下次訪问server时,会将sessionId携带给server。server会根据该sessionId查找到相应的session对象(用户的状态能够写到session对象上)。
        2,怎样创建session对象?
          1),HttpSessionsession =request.getSession();//server会创建一个符合HttpSesion接口标准定义的session对象
          2),HttpSessionsession = request.getSession(boolean flag);
            当flag为true:
            浏览器发送请求给server,server会查看请求中有无sessionId,若没有,则创建一个session对象;
            若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则创建一个新的对象
            当flag为false:
            浏览器发送请求给server,server会查看请求中有无sessionId,若没有,返回一个null;
            若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则返回一个null
          3),HttpSessionsession =request.getSession();  等价于 HttpSessionsession = request.getSession(true);
        3,session中的经常用法
          session.setAttribute(Stringname,Object obj);
          Objectsession.getAttribute(String name);//一般要得到后转型
          session.removeAttribute(Stringname);//去除某个属性
          Stringsession.getId();
        4,设置sesion的最大不活动时间
          session.setMaxInactiveInerval(intseconds);
          session.invalidate();//使之马上失效
        5,使用配置文件,设置session的失效时间,
          方式一,设置整个server的配置失效时间,这个方式会影响到该server上的全部应用。Tomcat默认30分钟
           TOMCAT_HOME/conf/web.xml
           <session-config>
            <session-timeout>30</session-timeout>
           </session-config>
          方式二,针对某个特定的应用进行配置失效时间
           仅仅须要改动web.xml
           <session-config>
            <session-timeout>30</session-timeout>
           </session-config>
        6,样例:
         A,对要保护的页面进行session验证
          session的验证:
           1,在登录成功后,写入数据做一个session属性加入
             <%
              session.setAttribute("user",user);
             %>
           2,在要保护的页面加上session验证代码
             <%
              Objectobj = session.getAttribute("user");
              if(null== obj){
               response.sendRedirect("login.jsp");
              }
             %>
           3,为了安全起见(有些时候浏览器没关,session还是存在的),做一个安全退出
             HttpSessionsession = request.getSession();
             session.invalidate();//使之失效
             response.sendRedirect("login.jsp");
         B,购物车
           Product:产品
            idlong,
            modelString,
            picNameString,
            proDescString,
            pricedouble;
           CartItem:商品条目
            productProduct,
            quantityint;
           Cart:购物车
            itemsList<CartItem>,
            booleanadd(CartItem item),
            List<CartItem>list(),
            delete(longid),
            clear(),
            modify(longid, int quantity),
            doublecost();
        7,假设用户禁止了cookie,怎样实现session机制?(怎样实现sessionId的跟踪)
         使用URL重写机制:
           假设要訪问的web组件(jsp或者servelt),须要session机制的支持(用到session的对象),
           可是浏览器端却禁止了cookie技术,那么不能直接在地址栏输入要訪问的web组件的定制,而要用server生成的地址,
           而应该使用server生成的一个地址(该地址后会携带sessionId)
         怎样生成一个携带sessionId的地址?
           A。对于链接、表单提交,使用response.encodeURL("url地址")。
              比方:<ahref="<%=response.encodeURL("url")%>"></a>
           B。对于重定向,使用response.encodeRedirectURL("url地址")。
              比方:response.sendRedirect(response.encodeRedirectURL("url地址") );
           C。对于转发,无须考虑,由于在server内部的跳转,无须与浏览器交互,不予考虑

     

    Session机制原理图:

    Java <wbr>EE <wbr>Session机制

    原文出自:http://blog.sina.com.cn/s/blog_6c21f6480100vllc.html
  • 相关阅读:
    安装oracle 10g常见问题解决方案
    Jdbc连Oracle
    XML及其技术指南
    JSP页面的五种跳转方法
    JDBC连接MySQL
    什么定向采集,什么泛采集?
    我的论坛密码忘记了,怎么办?
    可以自动设置dedecms的栏目吗?
    动易® SiteWeaver™ 内容管理系统6.8 发布模块如何使用?
    怎样做好站群 为什么做站群?
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4298917.html
Copyright © 2011-2022 走看看