• 【转】学习总结--Cookie & Session总结


    转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view

    一、状态管理
    1)什么是状态管理?
      将浏览器与web服务器之间多次交互过程当做一个整体来处理,并且将多次交互所涉及的数据进行管理。
    2)状态管理技术
    cookie:
      a,什么是cookie?
       是一种客户端(浏览器)的状态管理技术。
       浏览器在访问web服务器的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这结数据保存下来;当浏览器再次访问服务器的时候,会将这些数据以cookie消息头的方式发送给服务器。
      b,创建cookie
       Cookie c = new Cookie(String name,String value);
       response.addCookie(c);
      c, 查询cookie
       //如果没有cookie,返回null
       Cookie[] request.getCookies();
       String cookie.getName();
       String cookie.getValue();
      d, 编码问题
       cookie的值只能是ascii字符,对于中文,需要将中文转换成相应的ascii字符串的表示形式。
        String URLEncoder.encode(String,String enc)
        //创建 new Cookie(String name,URLEncoder.encode(String,"utf-8"))
        String URLDecoder.decode(String,String)//取
        URLDecoder.decode(cookie.getValue(),"utf-8")
      e, cookie的生存问题
       默认情况下,浏览器会将cookie保存在内存里,除非浏览器关闭,cookie一直存在。
       用setMaxAge(int seconds)设置cookie保存时间
       该方法需要注意:
        (1) 单位是秒
        (2) seconds >0 : cookie会保存在硬盘上,超过指定的时间,浏览器会删除该cookie。
         seconds <0 : 缺省值(保存在内存里)
         seconds =0: 删除cookie,
         比如,要删除一个名叫addr的cookie:
            Cookie c = new Cookie("addr","");
            c.setMaxAge(0);
            response.addCookie(c);      
      f,cookie的路径问题
       f1:浏览器在向服务器的某个地址发请求时,会先比较cookie的路径与要访问的这个地址是否匹配,只有匹配的cookie才会发送。
       f2:cookie会有一个路径(是一个字符串),该路径默认情况下等于创建该cookie的组件的路径。
       比如,/web06_2/app1/addCookie.jsp创建的cookie,其路径就等于"/web06_2/app1"。
          /web06_2/findCookie.jsp   error
          /web06_2/app1/findCookie1.jsp  ok
          /web06_2/app1/sub/findCookie2.jsp  ok
       f3: 只有要访问的地址是cookie的路径或者其子路径时,浏览器才会发送该cookie。
       f4:可以用setPath(String path);方法设置cookie的路径
          常见的使用是: setPath("/appname");访问该应用的所有资源都会带cookie过去了
      g,cookie的限制
      (1), cookie可以被用户禁止。
      (2), cookie能够保存的数据大小有限制(大约4k)。
      (3), cookie的个数有限制(浏览器在本地最大能够保存约300个左右的cookie)。
      (4), cookie不安全

    session:
    (1)什么是session?
      是一种服务器端的状态管理技术。
      浏览器访问服务器的时候,服务器会创建一个session对象(每一个session对象都有唯一的一个id号,一般称之为sessionId),默 认情况下,服务器会使用cookie技术将sessionId发送给浏览器,浏览器会将sessionId保存下来。当浏览器再次访问服务器的时候,会将 sessionId发送给服务器,服务器依据sessionId,就可以找到之前创建的session对象。
    (2)如何获得session对象?
      a, 方式一:
       HttpSession s = request.getSession();
       等价于request.getSession(true)。
      b, 方式二:
       HttpSession s = request.getSession(boolean flag);
       当flag=true时:
        服务器会查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,再创建一个新的session对象。
       当flag=false时:
        服务器会查看请求当中是否有sessionId,如果没有,会返回null;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,返回null。
    (3)HttpSession中声明的几个常用方法
      setAttribute(String name,Object obj);
      //如果绑订名称对应的值不存在,返回null。
      Object getAttribute(String name);
      removeAttribute(String name);  
    (4)session的超时
      1)服务器会将空闲时间过长的session对象从内存空间当中删除。服务器一般会有一个缺省的超时时间限制(30分钟)。
      2)可以修改超时限制
       对于tomcat,可以修改confweb.xml,修改完成需要重新启动服务器。
       <session-config>
              <session-timeout>30</session-timeout>
          </session-config>
          3)编程的方式
           setMaxInactiveInterval(int seconds);
    (5) 删除session
           invalidate();

    二、session与cookie的区别
    (1)cookie是一种客户端的状态管理技术,将状态写在浏览器端,
      而session是一种服务器端的状态管理技术,将状态写在web服务器上面。
    (2) cookie有很多限制:
      a,可以被用户禁止
      b,cookie能够保存的数据比较小(大约4k),而且保存的个数也有限制(300个左右)。
      c,cookie不安全
      d,cookie只能保存字符串
      而session能够保存更多的数据,相对更安全,保存的数据类型更丰富。
      session会将所有的状态写在服务器端,所以服务器的压力比较大,而cookie没有这个问题。

    小知识:如果用户禁止cookie,如何继续使用session(了解)
       (1)url重写
        在请求地址后面添加sessionId,一般由服务器来生成这个地址。
       (2)编程:
        //链接地址,表单提交地址
        a, response.encodeURL(String url);
        //重定向
        b, response.encodeRedirectURL(String url);
        //转发根本不用考虑

  • 相关阅读:
    WebSVN 2.3.3
    webSVN客户端(转) initOS的日志 网易博客
    分享:httping 2.0 发布,测试 HTTP 连接的工具
    ThriftUsageC++ Thrift Wiki
    硬盘接口:SCSI、IDE与SATA的区别
    把event sql导入数据库难点
    cpu插槽 LGA 1155
    Processing简介
    技嘉主板GAB75MD3V产品规格
    pci Express
  • 原文地址:https://www.cnblogs.com/csshaw/p/3701226.html
Copyright © 2020-2023  润新知