您的位置:首页 > Web前端 > JavaScript

jsp状态管理(Cookie Session)学习笔记整理

2016-02-22 14:35 645 查看
1、状态管理
    将浏览器与web服务器之间多次交互(一次请求,一次响应)当做一个整体看待,并且将多次交互涉及的数据即状态保存下来。
2、状态管理的两种常见模式
    (1)客户端状态管理技术:将状态保存在客户端。--------cookie技术
    (2)服务器状态管理技术:将状态保存在服务器。--------session技术
 3、cookie
    (1)什么是cookie
           服务器临时保存在浏览器端少量的数据
    (2)cookie工作原理
        浏览器访问服务器时,服务器将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来。
        当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
            
            具体过程:
              ①服务器创建cookie对象,把会话数据存储到cookie对象中。
 
              new Cookie("name","value");
              ② 服务器发送cookie信息到浏览器
 
               response.addCookie(cookie);
 
               举例: set-cookie: name=eric  (隐藏发送了一个set-cookie名称的响应头)
 
            ③浏览器得到服务器发送的cookie,然后保存在浏览器端。
              ④浏览器在下次访问服务器时,会带着cookie信息
 
               举例: cookie: name=eric  (隐藏带着一个叫cookie名称的请求头)
              ⑤服务器接收到浏览器带来的cookie信息
 
               request.getCookies();

           (3)创建cookie
                    Cookie cookie = new Cookie(String name,String value);
                                response.addCookie(cookie);
                       注:
                                name:用于区分不同的cookie的名字
                                value:Cookie的值
               (4)读取Cookie
                        Cookie [] cookie = request.getCookies();    -----读取客户端发来的全部cookie
                         String cookieName = cookie.getName(); -------读取cookie的名字
                         String  cookieValue = cookie.getValue();-------读取cookie的值
                        注:
                                request.getCookies()方法有可能返回null。一般需要加if判断

                (5)cookie的生存时间
                        1)缺省的(默认的)生存时间
                                浏览器会将cookie保存在内存,只要浏览器不关闭,cookie就会一直存在。
                        2)设置生存时间  setMaxAge(int seconds)
                            注:
                                    单位是秒
                              ①当seconds>0
                                    浏览器会将cookie保存在硬盘上,超过指定时间,浏览器就会删除该cookie。
                              ②当seconds=0
                                    删除cookie,比如要删除一个名称为“items”的cookie
                                    Cookie c =  new Cookie("items","");
                                                 c.setMaxAge(0);

                                                  response.addCookie(c); 
                              ③当seconds<0
                                       缺省值(保存在内存)
                
            (6)编码问题

                    cookie只能存放合法的ascii字符,如果是中文,需要将中文转换成合法的ascii字符。

                                String URLEncoder.encode(String str,String charset);

                                String URLDecoder.decode(String str,String charset);

                       注:

                              在保存cookie时,不管有没有中文,最好都编码处理。

           (7)路径问题

                    ①什么是cookie的路径问题?

                        浏览器再向服务器的某个地址发送请求时,会比较该地址是否与cookie的路径一致,要访问的地址必须是                     
                       Cookie的路径或者子路径时,浏览器才会发送Cookie,只有符合条件的cookie才会被发送。
                    ②cookie的默认路径

                        等于添加该cookie的组件的路径

                        比如,/web06_2/biz01/addCookie.jsp

                        默认路径等于“/web06_2/biz01/”

                    ③匹配方式

                        要访问的地址必须等于cookie的路径或者其子路径

                     如:

                             默认路径等于“/web06_2/biz01/”

                            /web06_2/findCookie1.jsp   不行

                            /web06_2/biz01/findCookie2.jsp 可以

                            /web06_2/biz01/sub/findCookie3.jsp 可以

                    ④修改路径

                            cookie.setPath(String path)

            (8)cookie的限制

                    ①不安全,不要将敏感数据以cookie的方式保存在浏览器端。如果一定要保存,需对敏感数据加密

                    ②可以被用户禁止

                    ③大小有限制(大约4k)
                    ④数量有限制(大约几百个)

                    ⑤只能保存字符串

4、session(会话)
        (1)什么是session(服务端为保存状态而创建的一个对象)
                浏览器在访问服务器时,服务器会单独创建一个session对象,并为这个对象分配一个唯一的ID称为sessionId,服务器会把这个sessionId以Cookie的方式发送给浏览器,当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器根据sessionId找到对应的session对象。
          (2)session的工作原理(就是让服务器能够识别不同的浏览者)
                    ①第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
 
                  new HttpSession();
            ②把JSESSIONID作为Cookie的值发送给浏览器保存
 
                 Cookie cookie = new Cookie("JSESSIONID", sessionID);
 
                  response.addCookie(cookie);
            ③第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
            ④服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
 
              if(找到){
 
                  return map.get(sessionID);
 
              }
 
                  Map<String,HttpSession>
                <"s001", s1>
 
              <"s001,"s2>
            ⑤如果找到对应编号的session对象,直接返回该对象
            ⑥如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

结论:通过JSESSION的cookie值在服务器找session对象!!!!!
       
    (3)如何获得session对象
                  ①  方式一:
                     
      HttpSession session = request.getSession(boolean flag);
                    注:
                     
      a、当flag=true时
                     
          先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
                     
          象,找不到则创建一个新的session对象。如果没有则创建一个session对象。
                     
      b、当flag=false时
                     
          先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
                     
          象,找不到则返回null。如果没有则返回null。
                  ②方式二:
                     
      HttpSession session = request.getSession();
                     
       等价于:HttpSession session = request.getSession(boolean flag=true);               
             (4)HttpSession提供的常用方法
     

                        String getId();  --------------------------------------得到session编号(id)

                        setAttribute(String name,Object value)-----------保存数据

                        Object getAttribute(String name);-----------------获取数据
                        removeAttribute(String name);--------------------清除数据

                               
setMaxInactiveInterval(int interval) ---------------设置session的有效时间
 
                       invalidate()-----------------------------------------销毁session对象
              (5)session超时

                        ①什么是session超时

                            服务器会将空闲时间过长的session对象删除掉。

                        ②缺省的超时时间限制

                            一般是30分钟

                        ③可以修改服务器缺省的超时时间限制。

                               以tomcat为例,可以修改conf\web.xml下

                            <session-config>

                                    <session-timeout>30</session-timeout>

                            </session-config>

                        ④setMaxInactiveInterval(int seconds) //设置最大间隔时间

            (6)删除session

                        invalidate();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息